Почему отображение и сбор списка наборов деревьев возвращают объект? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь поместить все элементы treeset значений списка с treesets в linkedHashSet.Этот список наборов деревьев возвращается методом values() из TreeMap<String, TreeSet>.Код выглядит следующим образом:

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

Это должно возвращать LinkedHashSet со всеми элементами плоских наборов деревьев.Но в действительности он возвращает объект типа Object.

Почему это происходит?Может кто-нибудь объяснить, что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Поскольку вы указали ссылку на конструктор LinkedHashSet без указания типа.

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

0 голосов
/ 02 октября 2018

Это то, что вы хотите?

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

PS Это преобразование данных выглядит странно.Возможно, вы могли бы описать свой случай более подробно?

0 голосов
/ 02 октября 2018

TreeSet введен не полностью:

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