Java 8调用布尔方法的流和集属性
请你帮我解决这个问题,当我试图通过一个数组列表流,并调用一个基于返回布尔值的方法的setter时 作为for循环编写,它如下所示:-Java 8调用布尔方法的流和集属性,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,请你帮我解决这个问题,当我试图通过一个数组列表流,并调用一个基于返回布尔值的方法的setter时 作为for循环编写,它如下所示:- for (final PersonDto person : personList) { person.setUserCanEdit(userHasWriteRole(person)); } private Boolean userHasWriteRole(final PersonDto person) { return getUserRo
for (final PersonDto person : personList) {
person.setUserCanEdit(userHasWriteRole(person));
}
private Boolean userHasWriteRole(final PersonDto person) {
return getUserRoles().contains(getReadRole());
}
我尝试了以下几种变体,但没有成功
final List<PersonDto> results = personList.stream().filter(a -> a.setUserCanEdit(this::userHasWriteRole)).collect(Collectors.toList());
final List results=personList.stream().filter(a->a.setUserCanEdit(this::userHasWriteRole)).collect(Collectors.toList());
。。。但它抱怨说
此表达式的目标类型必须是功能接口因为您正在更新数组列表中的对象,所以可以使用
filter()
方法是流接口的中间操作,它允许我们过滤与给定谓词匹配的流元素。无法更新筛选器中的数据。
为此使用forEach
personList.stream().forEach(a -> a.setUserCanEdit(userHasWriteRole(a)));
若你们想进入新的arraylist,复制一份list,并在新的list上执行这些操作
List<PersonDto> copy = new ArrayList<>(personList);
copy.stream().forEach(a -> a.setUserCanEdit(userHasWriteRole(a)));
List copy=new ArrayList(personList);
copy.stream().forEach(a->a.setUserCanEdit(userHasWriteRole(a));
我想我会选择:
personList.stream()
.filter(p -> userHasWriteRole(p))
.forEach(p -> p.setUserCanEdit(true));
我认为这样可以保持意图清晰,如果您想要一个包含过滤元素的列表,并对该列表中的每个元素执行
setUserCanEdit
;您可以这样做:
List newList=personList.stream()
.filter(p->userHasWriteRole(p))
.collect(Collectors.toList());
forEach(p->p.setUserCanEdit(true));
请澄清这一点私有布尔userHasWriteRole(final PersonDto person){return getUserRoles().contains(getReadRole());}
该方法实际上并不相关,它有更多的逻辑,但出于这个问题的目的,我想显示它返回一个布尔值。我尝试了这个方法,但得到了一个“类型不匹配:无法从void转换为List“forEach
方法是void类型@R111,那么如何实现所需的结果呢?personList将获得所需的输出,打印列表并检查@R111Thank@Deadpool。”。看起来是这样的,但是你能告诉我为什么我不能将输出分配给一个新的arraylist吗?e、 g.List newList=personList.forEach(person->person.setUserCanEdit(userHasWriteRole(person));
personList.stream()
.filter(p -> userHasWriteRole(p))
.forEach(p -> p.setUserCanEdit(true));