这是类 Item。
public class Item {
String id;
String name;
Integer value;
Boolean status;
}
我有一个 map (字符串,集合(项目))。我想编写一个返回 Map(String, Set(Item)) 的方法,以便结果映射中仅存在 status = false 或 status = null 的项目。我不想要一个集合范围的操作。我希望生成的子集仅包含那些具有 status == Boolean.FALSE 或 status == null 的 Item。我不希望包含或排除整个集合。我只想根据状态值包含或排除那些单独的项目。
这是我到目前为止所尝试过的。
public Map<String,Set<Item>> filterByStatus(Map<String, Set<Item>> changes) {
return changes.entrySet()
.stream()
.filter(p -> p.getValue()
.stream()
.anyMatch(item -> BooleanUtils.isNotTrue(item.isStatus())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
没成功!如果我没有调用filterByStatus,我会得到相同的结果。
更新
public Map<String,Set<Item>> filterByStatus(Map<String, Set<Item>> changes) {
return changes.entrySet()
.stream()
.map(p -> p.getValue()
.stream()
.filter(item -> BooleanUtils.isNotTrue(item.isStatus())))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
}
结果:collect(Collectors.toMap()) 行中出现错误,指出无法从静态上下文引用非静态方法。
最佳答案
public Map<String, Set<Item>> filterByStatus(Map<String, Set<Item>> changes) {
return changes.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry ->
entry.getValue()
.stream()
.filter(item -> item.status == null || item.status == Boolean.FALSE)
.collect(Collectors.toSet())
));
}
关于java - 使用 Java 8 : Map<String, 基于对象的属性从 Map<String, Set<Object>> 中设置 <Object>> 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48698567/