【发布时间】:2019-07-24 14:10:27
【问题描述】:
看起来Map.of() 和List.of() 都创建了不可变集合。这很有用,但我正在寻找一种有时使用工厂方法创建可变集合的方法。
当我尝试时:HashMap.of() 我收到此错误:
静态方法只能在包含接口类时调用
【问题讨论】:
标签: java
看起来Map.of() 和List.of() 都创建了不可变集合。这很有用,但我正在寻找一种有时使用工厂方法创建可变集合的方法。
当我尝试时:HashMap.of() 我收到此错误:
静态方法只能在包含接口类时调用
【问题讨论】:
标签: java
HashMap 有一个可以接受另一个Map 的构造函数,因此您可以通过传递Map.of(...) 产生的任何内容来创建HashMap:
HashMap<String, String> map = new HashMap<>(Map.of("k1", "v1", "k2", "v2"));
ArrayList 和 List.of(...) 也是如此。
【讨论】:
new ArrayList<>(List.of()) 对
List.of() 和 Map.of() 被认为是相对最近添加的,尽管 Java 9 是 4 年前发布的。
我在 utils 类中使用了一个自定义方法。请尝试,它可以正常工作。
public static Map<String, Object> mutableMap(Object... args) {
return IntStream.iterate(0, i -> i < args.length, i -> i + 2)
.filter(i -> i + 1 < args.length)
.boxed()
.collect(toMap(i -> (String) args[i], i -> args[i + 1], (a, b) -> b, HashMap::new));
}
此外,您可以根据需要添加对成对参数数量的验证或添加逻辑以替换“null”值。
【讨论】: