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