list.stream.filter过滤条件为equals时过滤失败
时间: 2023-10-27 10:57:37 浏览: 134
可能是因为使用了错误的方法来比较对象。在Java中,使用equals方法来比较两个对象是否相等,而不是使用"=="运算符。如果过滤条件使用了"=="运算符,那么过滤可能会失败。另外,确保过滤条件的正确性,以及确保List中的元素正确实现了equals方法。可以尝试使用debug模式来查看代码执行过程,以便更好地定位问题。
相关问题
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"的菜单项,并按照排序规则排列的列表。
list.stream().filter多条件
引用和展示了如何使用stream和filter方法来实现单条件过滤。可以将多个filter方法链接在一起来实现多条件过滤。例如,使用多个filter方法来过滤性别为1和城市为北京市的用户可以这样写:
list.stream().filter(s->s.getGender().equals("1")).filter(s->s.getCity().equals("北京市")).collect(Collectors.toList());
引用展示了如何同时过滤两个列表中的元素。你可以使用两个filter方法来分别过滤每个列表中的元素,并将两个列表合并在一起。例如,过滤在list1和list2中城市和姓名都相同的用户可以这样写:
list1.stream().filter(user1 -> list2.stream().map(user2 -> user2.getCity() + "&" + user2.getName()).collect(Collectors.toList()).contains(user1.getCity() + "&" + user1.getName())).collect(Collectors.toList());
阅读全文