list.stream().filter方法
时间: 2023-09-25 15:15:08 浏览: 89
list.stream().filter方法用于对列表进行过滤操作。它接受一个Predicate函数式接口作为参数,该接口定义了一个test方法,用于判断列表中的元素是否满足某个条件。filter方法会返回一个新的Stream对象,其中包含符合条件的元素。
例如,我们有一个包含整数的列表,我们想要过滤出所有大于10的元素,可以使用filter方法来实现:
```java
List<Integer> filteredList = list.stream()
.filter(num -> num > 10)
.collect(Collectors.toList());
```
在上面的例子中,num -> num > 10是一个Lambda表达式,它定义了一个条件,即元素大于10。filter方法会遍历列表中的每个元素,并将满足条件的元素添加到新的Stream对象中。最后,通过collect方法将Stream对象转换为一个新的List对象。
这样,filter方法就能帮助我们筛选出符合特定条件的元素,从而对列表进行过滤操作。
相关问题
java list.stream().filter和list.stream().peek却别
在Java 8的Stream API中,`filter()` 和 `peek()` 都是用来操作集合的高阶函数,但它们的作用略有区别。
1. **`filter(Predicate<T>)`:** 这个方法用于过滤流中的元素。它接受一个谓词(Predicate),这个谓词是一个返回布尔值的函数,如果元素满足这个条件(谓词返回true),则会被包含在结果流中。举个例子,如果你想从列表中筛选出所有的偶数,你可以这样做:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
```
结果将是 `[2, 4]`。
2. **`peek(Consumer<T>):**** 这个方法应用于每个元素上,但它并不改变元素本身或流的结构。`peek()` 接收一个消费者(Consumer),该消费者对每个元素执行一些副作用操作(例如打印、计数等),而不会影响实际的流结果。例如:
```java
List<String> words = Collections.singletonList("hello");
words.stream()
.peek(System.out::println)
.forEach(System.out::println); // 打印 "hello" 后,再打印列表中原有的每一个元素
```
输出将是:
```
hello
hello
```
总结来说,`filter()` 改变了流的内容,而 `peek()` 只是做了额外的操作但不影响最终结果。如果你关心的是过滤后的数据,用 `filter()`;如果你需要对元素做些额外操作但结果不变,用 `peek()`。
List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList()); List<RsysMenu> rootMenus = list.stream().filter(item -> "M".equals(item.getParentId())).sorted().collect(Collectors.toList());
这段代码是一个Java代码片段,它的作用是从一个列表中过滤出所有父节点为"M"的菜单项,并按照一定规则进行排序,最后将结果收集到一个新的列表中。
首先,通过使用`stream()`方法将列表转换为流,然后使用`filter()`方法过滤出父节点为"M"的菜单项。接着,使用`sorted()`方法对菜单项进行排序。最后,使用`collect()`方法将过滤和排序后的菜单项收集到一个新的列表中。
请注意,代码中多次出现的重复行是输入错误,应该删除多余的行。正确的代码应该是这样的:
```java
List<RsysMenu> rootMenus = list.stream()
.filter(item -> "M".equals(item.getParentId()))
.sorted()
.collect(Collectors.toList());
```
这样,你就可以得到一个包含所有父节点为"M"的菜单项,并按照排序规则排列的列表。
阅读全文