为什么映射和收集树集列表会返回一个对象?

时间:2018-10-02 15:30:22

标签: java java-8 java-stream

我正在尝试将具有树集的列表的所有值树集元素放入linkedHashSet中。该树集列表由values()的{​​{1}}方法返回。代码如下:

TreeMap<String, TreeSet>

这应该返回一个Map<String, TreeSet> sortedByMonthAndVarietyNameMap = new HashMap<>(); sortedByMonthAndVarietyNameMap.values().stream().flatMap(monthList -> monthList.stream()).collect(Collectors.toCollection(LinkedHashSet::new)); ,其中包含被映射树集的所有元素。但实际上,它返回类型为LinkedHashSet的对象。

为什么会这样?有人可以解释我在做什么错吗?

3 个答案:

答案 0 :(得分:4)

TreeSet没有完全键入:

Map<String, TreeSet<Integer>> sortedByMonthAndVarietyNameMap = new HashMap<>();
LinkedHashSet<Integer> result = sortedByMonthAndVarietyNameMap.values().stream()
        .flatMap(monthList -> monthList.stream())
        .collect(Collectors.toCollection(LinkedHashSet::new));

答案 1 :(得分:0)

您已经提供了LinkedHashSet的构造方法参考,而没有指定类型。

https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.13

答案 2 :(得分:0)

这是您想要的吗?

LinkedHashSet<TreeSet> collect = sortedByMonthAndVarietyNameMap
    .values()
    .stream()
    .flatMap(Stream::of)
    .collect(Collectors.toCollection(LinkedHashSet::new));

P.S。这种数据转换看起来很奇怪。也许您可以更详细地描述您的情况?