从 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)
假设我有一个地图列表,例如: (使用 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)