我有一个hashmap示例数组
[
{
name:"Sudeep"
},
{
name:"Sudeep"
}
]
我想使用Java流将Java中每个对象的大写字母命名。使用时,其响应为
[
"SUDEEP",
"SUDEEP"
]
(List) string.parallelStream().map(s -> ((HashMap<String,String>)s).get(key).toUpperCase()).collect(Collectors.toList());
请帮助
答案 0 :(得分:1)
我有HashMap数组,这意味着你有:
Map<String, String>[] map = new HashMap[2];
map[0] = new HashMap<String, String>() {{
put("name", "Sudeep");
}};
map[1] = new HashMap<String, String>() {{
put("name", "Sudeep");
}};
大写可以使用的特定键的所有值:
String key = "name";
List<String> result = Arrays.stream(map)
.map(m -> m.get(key).toUpperCase())
.collect(Collectors.toList());
输出
[SUDEEP, SUDEEP]
如果要编辑相同的地图数组,可以使用:
String key = "name";
map = Arrays.stream(map)
.map(s -> {
s.computeIfPresent(key, (k, v) -> s.get(key).toUpperCase());
return s;
}).toArray(s -> new HashMap[s]);
Arrays.stream(map).forEach(System.out::println);
输出
{name=SUDEEP}
{name=SUDEEP}
如果您在解析json和获取信息时遇到困难,这是解决问题的快速方法(我正在使用org.json):
import org.json.JSONArray;
import java.util.*;
public class Mcve {
public static void main(String[] args) {
String string = "[{name:\"Sudeep\"},{name:\"Sudeep\"}]";
JSONArray parsing = new JSONArray(string);
Map<String, String>[] map = new HashMap[parsing.length()];
for (int i = 0; i < parsing.length(); i++) {
String value = parsing.getJSONObject(i).getString("name");
map[i] = new HashMap<>() {{
put("name", value);
}};
}
//... one of the solution that I already provide
}
}
答案 1 :(得分:0)
要完全理解您要达到的准确程度是非常困难的,我认为任何密钥都是有效的,并且您不关心密钥,因为我在问题中看不到任何引用。 假设您的内部映射具有多个键,并且您想将值转换为大写并忽略键->这是您的解决方案:
map.parallelStream().map(m -> m.values()).flatMap(l -> l.stream()).map(String::toUpperCase).collect(Collectors.toList());
地图的格式为
[
{
name:"Sudeep"
},
{
name:"Sudeep"
}
]
答案 2 :(得分:0)
也许这就是您要寻找的
List<< Map< String, String>> result = Arrays.stream(map).map(m -> m.entrySet().stream()
.collect(Collectors.toMap(k -> k.getKey(), v -> v.getValue().toUpperCase())))
.collect(Collectors.toList());