[英]Reduce the size of list with Java 8 stream
我想减小地图对象有序列表的大小(删除一些元素)。 除非满足某个条件,否则应丢弃 list 的所有对象。 当满足该条件时,该列表的所有下一个元素都应保留在列表中。 我有以下一段代码。 我想对 Java 8 做同样的事情。
public List<Map<String, String>> doAction(List<Map<String, String>> dataVoMap) {
List<Map<String,String>> tempMap = new ArrayList<>();
boolean found = false;
for(Map<String, String> map: dataVoMap){
if(map.get("service_id").equalsIgnoreCase("passed value") || found){
found = true;
tempMap.add(map);
}
}
dataVoMap = tempMap;
return dataVoMap;
}
您正在寻找dropWhile
操作,但该操作的内置实现需要 Java-9 及更高版本:
public List<Map<String, String>> doAction(List<Map<String, String>> dataVoMap) {
return dataVoMap.stream()
.dropWhile(m -> !"passed value".equalsIgnoreCase(m.get("service_id")))
.collect(Collectors.toList());
}
注意:我已对现有代码进行了编辑,以避免在List
可能存在没有键service_id
的Map
时发生 NPE。
有一个使用小技巧的解决方案:
public static List<Map<String, String>> doAction(List<Map<String, String>> dataVoMap) {
AtomicBoolean found = new AtomicBoolean(false);
return dataVoMap.stream()
.filter(map -> found.get() || "passed value".equalsIgnoreCase(map.get("service_id")))
.peek(map -> found.set(true))
.collect(Collectors.toList());
}
如果您不需要并行流,您可以将此解决方案与 Java 8 一起使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.