最近,我与一位同事讨论了如何在Java中转换List
为最佳方式,Map
以及是否有任何特定的好处.
我想知道最佳转换方法,如果有人能指导我,我会非常感激.
这是一个好方法:
List<Object[]> results;
Map<Integer, String> resultsMap = new HashMap<Integer, String>();
for (Object[] o : results) {
resultsMap.put((Integer) o[0], (String) o[1]);
}
Run Code Online (Sandbox Code Playgroud) 是否有更好的功能方式将"key:value"形式的字符串数组转换为Map
使用Java 8 lambda语法?
Arrays.asList("a:1.0", "b:2.0", "c:3.0")
.stream()
.map(elem -> elem.split(":")
.collect(Collectors.toMap(keyMapper?, valueMapper?));
Run Code Online (Sandbox Code Playgroud)
我现在的解决方案似乎没有真正的功能:
Map<String, Double> kvs = new HashMap<>();
Arrays.asList("a:1.0", "b:2.0", "c:3.0")
.stream()
.map(elem -> elem.split(":"))
.forEach(elem -> kvs.put(elem[0], Double.parseDouble(elem[1])));
Run Code Online (Sandbox Code Playgroud) 我正在编写一个函数,使用Java 8 Stream将数组转换为Map.
这就是我想要的
public static <K, V> Map<K, V> toMap(Object... entries) {
// Requirements:
// entries must be K1, V1, K2, V2, .... ( even length )
if (entries.length % 2 == 1) {
throw new IllegalArgumentException("Invalid entries");
}
// TODO
Arrays.stream(entries).????
}
Run Code Online (Sandbox Code Playgroud)
有效的用法
Map<String, Integer> map1 = toMap("k1", 1, "k2", 2);
Map<String, String> map2 = toMap("k1", "v1", "k2", "v2", "k3", "v3");
Run Code Online (Sandbox Code Playgroud)
无效的用法
Map<String, Integer> map1 = toMap("k1", 1, "k2", 2, "k3");
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
谢谢!