Java 8 Stream API

Bu oddiy yo'riqlarim bor

Stream.concat(manager.getChild().stream(), 
            manager1.getChild().stream())
            .map(dev -> dev.getSalary())
            .reduce(0, Integer::max);

Ikki Ro'yxatni birlashtiradi va ishlab chiqaruvchini ko'proq daromad keltiradi. Bu oqimdagi ob'yektlarning maksimal ish haqini qaytaradi, lekin maksimal maoshga ega bo'lgan obyektni qanday qilib qaytarishim mumkin?

2
Ish haqi bilan taqqoslanadigan map va kamaytiring va max ni o'rniga mos Comparator yordamida olib tashlang.
qo'shib qo'ydi muallif Jesper, manba
Ish haqi bilan taqqoslanadigan map va kamaytiring va max ni o'rniga mos Comparator yordamida olib tashlang.
qo'shib qo'ydi muallif Jesper, manba
Iltimos, keyingi safar yana mos keladigan savol sarlavhasini tanlang
qo'shib qo'ydi muallif Joshua, manba
Iltimos, keyingi safar yana mos keladigan savol sarlavhasini tanlang
qo'shib qo'ydi muallif Joshua, manba
Iltimos, keyingi safar yana mos keladigan savol sarlavhasini tanlang
qo'shib qo'ydi muallif Joshua, manba
Iltimos, keyingi safar yana mos keladigan savol sarlavhasini tanlang
qo'shib qo'ydi muallif Joshua, manba
Nima uchun bu erda kamaytirishni ishlatasiz?
qo'shib qo'ydi muallif Sergii Bishyr, manba
Nima uchun bu erda kamaytirishni ishlatasiz?
qo'shib qo'ydi muallif Sergii Bishyr, manba
"Barcha narsalar" nimani anglatadi?
qo'shib qo'ydi muallif Timothy Truckle, manba
Stream1) (manager.getChild ()), manager1.getChild (). Stream ()) .max ((dev1, dev2) -> Integer.max (dev1 .getSalary (), dev2.getSalary ())). (); lekin juda yaxshi ishlamaydi.
qo'shib qo'ydi muallif Dennis, manba
Stream1) (manager.getChild ()), manager1.getChild (). Stream ()) .max ((dev1, dev2) -> Integer.max (dev1 .getSalary (), dev2.getSalary ())). (); lekin juda yaxshi ishlamaydi.
qo'shib qo'ydi muallif Dennis, manba

7 javoblar

Use Stream.max(Comparator<? super T> comparator) method:

Stream.concat(manager.getChild().stream(),
    manager1.getChild().stream())
    .max(Comparator.comparingInt(dev -> dev.getSalary())
6
qo'shib qo'ydi
Ishingiz uchun katta rahmat.
qo'shib qo'ydi muallif Dennis, manba

Use Stream.max(Comparator<? super T> comparator) method:

Stream.concat(manager.getChild().stream(),
    manager1.getChild().stream())
    .max(Comparator.comparingInt(dev -> dev.getSalary())
6
qo'shib qo'ydi
Ishingiz uchun katta rahmat.
qo'shib qo'ydi muallif Dennis, manba

Use Stream.max(Comparator<? super T> comparator) method:

Stream.concat(manager.getChild().stream(),
    manager1.getChild().stream())
    .max(Comparator.comparingInt(dev -> dev.getSalary())
6
qo'shib qo'ydi
Ishingiz uchun katta rahmat.
qo'shib qo'ydi muallif Dennis, manba

Use Stream.max(Comparator<? super T> comparator) method:

Stream.concat(manager.getChild().stream(),
    manager1.getChild().stream())
    .max(Comparator.comparingInt(dev -> dev.getSalary())
6
qo'shib qo'ydi
Ishingiz uchun katta rahmat.
qo'shib qo'ydi muallif Dennis, manba

Afsuski, maksimal ish haqini beruvchi oqim elementini olish uchun avvalgi qadamga qaytib bora olmaysiz; elementlarni biror xususiyat bilan taqqoslashingiz kerak.

Rahbariyatni eng yuqori ish haqi bilan topish uchun:

Employee max = Stream.of(manager, manager1)
  .map(Employee::getChild)
  .flatMap(Collection::stream)
  .max(Comparators.comparing(Employee::getSalary))
  .orElse(null);

Men Employee sinfini oldim, shuning uchun metodlardan foydalanish mumkin, shuningdek IMHO kodini boshqaruvchilarni oqimlash orqali boshlash uchun yanada qulayroq/standart yondashuvga qayta kodlash mumkin.

1
qo'shib qo'ydi
flatMap bu erda ortiqcha
qo'shib qo'ydi muallif ZhekaKozlov, manba
@ZhekaKozlov lekin yanada moslashuvchan: Siz bu oqimni har qanday boshqaruv oqimiga ulashingiz mumkin, masalan List .stream() yoki Arrays.stream() orqali ishlaydigan [] va boshqalar. Aksincha, oqimlarni qattiq kodlash o'lchovli yoki moslashuvchan emas va DRY
qo'shib qo'ydi muallif Bohemian, manba

Afsuski, maksimal ish haqini beruvchi oqim elementini olish uchun avvalgi qadamga qaytib bora olmaysiz; elementlarni biror xususiyat bilan taqqoslashingiz kerak.

Rahbariyatni eng yuqori ish haqi bilan topish uchun:

Employee max = Stream.of(manager, manager1)
  .map(Employee::getChild)
  .flatMap(Collection::stream)
  .max(Comparators.comparing(Employee::getSalary))
  .orElse(null);

Men Employee sinfini oldim, shuning uchun metodlardan foydalanish mumkin, shuningdek IMHO kodini boshqaruvchilarni oqimlash orqali boshlash uchun yanada qulayroq/standart yondashuvga qayta kodlash mumkin.

1
qo'shib qo'ydi
flatMap bu erda ortiqcha
qo'shib qo'ydi muallif ZhekaKozlov, manba
@ZhekaKozlov lekin yanada moslashuvchan: Siz bu oqimni har qanday boshqaruv oqimiga ulashingiz mumkin, masalan List .stream() yoki Arrays.stream() orqali ishlaydigan [] va boshqalar. Aksincha, oqimlarni qattiq kodlash o'lchovli yoki moslashuvchan emas va DRY
qo'shib qo'ydi muallif Bohemian, manba

Afsuski, maksimal ish haqini beruvchi oqim elementini olish uchun avvalgi qadamga qaytib bora olmaysiz; elementlarni biror xususiyat bilan taqqoslashingiz kerak.

Rahbariyatni eng yuqori ish haqi bilan topish uchun:

Employee max = Stream.of(manager, manager1)
  .map(Employee::getChild)
  .flatMap(Collection::stream)
  .max(Comparators.comparing(Employee::getSalary))
  .orElse(null);

Men Employee sinfini oldim, shuning uchun metodlardan foydalanish mumkin, shuningdek IMHO kodini boshqaruvchilarni oqimlash orqali boshlash uchun yanada qulayroq/standart yondashuvga qayta kodlash mumkin.

1
qo'shib qo'ydi
flatMap bu erda ortiqcha
qo'shib qo'ydi muallif ZhekaKozlov, manba
@ZhekaKozlov lekin yanada moslashuvchan: Siz bu oqimni har qanday boshqaruv oqimiga ulashingiz mumkin, masalan List .stream() yoki Arrays.stream() orqali ishlaydigan [] va boshqalar. Aksincha, oqimlarni qattiq kodlash o'lchovli yoki moslashuvchan emas va DRY
qo'shib qo'ydi muallif Bohemian, manba