Stream API. Часть 2. Промежуточные методы для фильтрации данных.
Vložit
- čas přidán 3. 03. 2021
- Программу данного курса вы можете посмотреть по ссылке - docs.google.com/document/d/1H...
В этой лекции мы рассмотрим промежуточные методы Stream API для фильтрации данных.
Ссылка на конспект этой лекции - drive.google.com/file/d/1gKTy...
Спасибо! Познавательно
за задания отдельные спасибо!
Не совсем понял про пару dropWhile/takeWhile. В лекции, вроде, говорится, что они работают от первого "true" до первого "false".
Но как я понял, они работают либо только для ПЕРВЫХ элементов в потоке (если предикат для них дает true (начиная с самого первого элемента)), либо вообще не работают. Т.е. нельзя из середины потока либо забрать элементы (takeWhile), либо удалить элементы (dropWhile).
Пример ниже не удалет нули. Выводится исходный набор элементов:
import java.util.stream.*;
class I
{
public static void main (String[] args) throws java.lang.Exception
{
IntStream.of(5,5,5,0,0,0,5,5,0,0,1)
.unordered()
.dropWhile(x-> x==0)
.forEach(System.out::println);
}
}
Так на самом деле мы же говорим о одном и том же. В вашем примере вы получите false на первом элементе, и все работа dropWhile окончена. И да конечно ничего не изменится в вашем примере. Тоже самое и takeWhile.
@@oleksandrtsymbaliuk
Ну, в общем, я не уловил акцента, что эти методы работают именно на первых элементах:) Первое подмножество в середине потока они "брать" не будут.
что-то не получается четвертое задание.. (( там должны быть использованы takeWhile, dropWhile?
Добрый день. Нет не нужно. Тут классический filter
@@oleksandrtsymbaliuk String dependecies = "org.springframework.boot
" +
" spring-boot-starter-parent
" +
" 3.2.2
" +
"
" +
"
" +
" com.example
" +
" demo
" +
" 0.0.1-SNAPSHOT
" +
" demo";
String[] lines = dependecies.split("\
");
List groupIds = Arrays.stream(lines).filter(s -> s.contains("") && s.contains(""))
.map(s->s.replaceAll("","")
.replaceAll("","")).collect(Collectors.toList());
System.out.println(groupIds);
Да что то типа такого
Когда говорится о конвейерной природе потоков, т.е. каждый элемент проходит всю цепочку методов вплоть до терминального, можно упомянуть о промежуточном методе sorted как об исключении)
Видел более наглядный подхой к этому моменту: прямо в цепочку вставлять вывод на экран названия текущего промежуточного метода. Тогда лучше видно как "живут" элементы в потоке:
Stream.of("d2", "a2", "b1", "b3", "c")
.sorted((s1, s2) -> {
System.out.printf("sort: %s; %s
", s1, s2);
return s1.compareTo(s2);
})
.filter(s -> {
System.out.println("filter: " + s);
return s.startsWith("a");
})
.map(s -> {
System.out.println("map: " + s);
return s.toUpperCase();
})
.forEach(s -> System.out.println("forEach: " + s));
Начал смотреть четвертую часть про стримы: именно этот подход вы там и применяете:)))🤷♂️😀