java - 将 Set 转换为 Map 时出现问题

标签 java java-8 collectors

我正在尝试使用收集器使用 Java 8 将 Set 转换为 Map。

Set<B2BUnitModel> payersList = ..... 
final Map<B2BUnitModel, List<B2BUnitPartnershipModel>> b2bUnitPartnershipMap = new HashMap<>();
final Map<B2BUnitModel, Object> map = payersList.stream().collect(Collectors.toMap(Function.identity(), Arrays::asList));
b2bUnitPartnershipMap.putAll(map); // Will throw Type Cast Error

Arrays::asList 以来,我无法理解如何将 Map 值转换为 B2BUnitPartnershipModel 类型只会返回 Object类型。

有什么方法可以让我在 Collectors.toMap(Function.identity(), Arrays::asList) 中写点东西吗?本身,以便 api 将返回所需的 map ( Map<B2BUnitModel, List<B2BUnitPartnershipModel>> 而不是 Map<B2BUnitModel, Object> )。

我想创建一个以 Set value 作为键且为空 B2BUnitPartnershipModel 的 Map列表。

最佳答案

假设 B2BUnitModelKey 并且 B2BUnitPartnershipModelValue 下面的代码生成一个映射,其中包含集合中的键和空列表作为值使用 lambda expressions而不是 method references .

代码

@Test
public void testMapCollector() {

    Set<Key> keySet = new HashSet<>();
    keySet.add(new Key("key1"));
    keySet.add(new Key("key2"));
    keySet.add(new Key("key3"));

    Map<Key, List<Value>> map = keySet.stream().collect(
            Collectors.toMap(k -> k, key -> new ArrayList<>()));

    System.out.println(map);

}

class Key {
    String key;

    public Key(String value) {
        this.key = value;
    }

    @Override
    public String toString() {
        return "Key [key=" + key + "]";
    }
}

class Value {
}

输出

{Key [key=key1]=[], Key [key=key3]=[], Key [key=key2]=[]}

关于java - 将 Set 转换为 Map 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42296862/

相关文章:

java 输出十六进制(ByteArrayOutputStream)

java - lambda 表达式中的 AtomicInteger 变量

java - Collectors.toSet() 是否总是返回 HashSet ?什么是契约(Contract)?

java - 如何使用 Collectors 制作 map 的 map

下游的 Java 8 Collector.groupingBy 分类器值

javascript - 我可以在 java 中使用来自服务器回调的 javascript 函数吗?

java - Jsoup,忽略带有 javascript 弹出窗口的链接 <a href ="javascript:OpenPopup()">

java - 添加 JFreeChart 和 JCommon 库后,无法访问 org.jfree.chart.JFreeChart 类型

java - 从 Map Java 8 中的 Map 获取字符串

java-8 - Vertx RxJava Webclient 客户端