使用Java流使对象数组大写

时间:2018-07-06 19:49:57

标签: java java-8 java-stream

我有一个hashmap示例数组

[
    {
      name:"Sudeep"
    },
    {
      name:"Sudeep"
    }
]

我想使用Java流将Java中每个对象的大写字母命名。使用时,其响应为

[
   "SUDEEP",
   "SUDEEP"
]

(List) string.parallelStream().map(s -> ((HashMap<String,String>)s).get(key).toUpperCase()).collect(Collectors.toList());

请帮助

3 个答案:

答案 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());