【问题标题】:Create mutable collections (Map.of and List.of)创建可变集合(Map.of 和 List.of)
【发布时间】:2019-07-24 14:10:27
【问题描述】:

看起来Map.of()List.of() 都创建了不可变集合。这很有用,但我正在寻找一种有时使用工厂方法创建可变集合的方法。

当我尝试时:HashMap.of() 我收到此错误:

静态方法只能在包含接口类时调用

【问题讨论】:

标签: java


【解决方案1】:

HashMap 有一个可以接受另一个Map 的构造函数,因此您可以通过传递Map.of(...) 产生的任何内容来创建HashMap

HashMap<String, String> map = new HashMap<>(Map.of("k1", "v1", "k2", "v2"));

ArrayListList.of(...) 也是如此。

【讨论】:

  • 所以这可能是new ArrayList&lt;&gt;(List.of())
  • @AlexanderMills 是的,没错。
  • 我真的开始慢慢讨厌 Java 了。为什么其他所有语言都可以发展为富有表现力,而 Java 必须保持这种状态?这是我将尽快迁移到 Kotlin 的主要原因(我不会因为工作上的不可能而选择 Scala)
  • @nrtp:Java 正在发展,不幸的是吸收速度非常缓慢。不幸的是,List.of()Map.of() 被认为是相对最近添加的,尽管 Java 9 是 4 年前发布的。
【解决方案2】:

我在 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”值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 1970-01-01
    • 2016-02-17
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多