从 Java 中的 List<Map> 中特定键的所有值生成字符串?

Generate a String from all values of a specific key from List<Map> in Java?

假设我有一个地图列表,例如: (使用 json 格式只是为了演示)

List<Map> myList = [
    {
        "id": 12,
        "name": "Harie"
    },
    {
        "id": "Forty",
        "location": "Earth"
    },
    {
        "name": "Potah"
    },
    {
        "id": "0"
    }
]

现在我想要单个 String 对象中的所有“id”值,用分隔符分隔。 例如,上面的地图应该给我:

"12#Forty#0"

注意: 必须维护它们在列表中的索引顺序。 我知道我可以这样做:

        StringBuilder result = new StringBuilder();
        for (Map map : myList) {
            if (map.get("id") instanceof String) {
                if(result.length()>0){
                    result.append('#');
                }
                result.append(map.get("id"));
            }
        }
        //Use result.toString() for output

但我想要一个更具可读性和简化的代码,最好使用Java流api。

StringBuilder sb = new StringBuilder();
myList.stream().map((mapping) => {
   sb.append(mapping.get(id))
   sb.append("#")
}

您可以在 lambda 函数中添加额外的逻辑!

您可以使用流并连接所有不为空的键 id

String keyString = myList.stream()
           .map(map->map.get("id"))
           .filter(Objects::nonNull)
           .map(Object::toString)
           .collect(Collectors.joining("#"));

如果您想检查值是否为 String 实例,您可以 filter

filter(val-> val!=null && val instance String)