Java 8 – findAny, findFirst, limit, max and min


Java 8 – findAny, findFirst, limit, max and min

Dzisiaj krótko na temat metod wykorzystywanych z użyciem strumieni findAny, findFirst, limit, max, min:

List<String> list = Arrays.asList("1000","1001","1002");
 
list.stream().findAny().ifPresent(arg->System.out.println(arg));
list.stream().findFirst().ifPresent(arg->System.out.println(arg));
list.stream().limit(2).forEach(arg->System.out.println(arg));
 
String max = list.stream().max(Comparator.comparing(arg -> arg.valueOf(arg))).get();
String min = list.stream().min(Comparator.comparing(String::valueOf)).get();
 
System.out.println(max);
System.out.println(min);

Wynik:

1000
1000
1000
1001
1002
1000

Dlaczego nie ma metody findLast? Odpowiedź jest prosta – nie jest to naturalna operacja biorąc pod uwagę przeznaczenie strumieni, ale są inne mechanizmy które dają możliwość wyznaczenia ostatniego elementu strumienia np. metoda reduce:

String lastValue = list.stream().reduce((first, second) -> second).orElse(null);
System.out.println(lastValue);
 
/* 
   1000, 1001 => 1001
   1001, 1002 => 1002 
*/

Inna metoda to pomięcie wszystkich elementów za wyjątkiem ostatniego z użyciem metody skip:

long count = list.stream().count();
Stream<String> stream = list.stream();
System.out.println(stream.skip(count - 1).findFirst().get());

Jeszcze inny sposób z użyciem metody iterate:

Stream<Integer> integerStream = Stream.iterate(0, i -> i + 1).limit(list.size());
Integer lastValueIndex = integerStream.reduce((first, second) -> second).orElse(null);
System.out.println(list.get(lastValueIndex));


Leave a comment

Your email address will not be published.


*