使用 Java 8 流减少列表的大小

Tis*_*ash 5 java java-8 java-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;
}
Run Code Online (Sandbox Code Playgroud)

Nam*_*man 6

您正在寻找一种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());
}
Run Code Online (Sandbox Code Playgroud)

注意:我对现有代码进行了编辑,以避免MapList没有密钥的情况下可能存在 NPE service_id

  • 避免 NPE 可能是不可取的,如果预计映射不会丢失任何键,那么您通常不希望它默默地失败。不过,很好的答案。 (4认同)