Я хочу использовать потоки в Java для группировки длинного списка объектов на основе нескольких полей.Это приведет к карте map of map of map of .... of list list.
Как я могу извлечь списки только из этого сложного потока?
Вот примеркод для демонстрации (список строк, поиск групп с одинаковой длиной и первой буквой).Я не заинтересован в ключах, просто в результирующих сгруппированных объектах.
List<String> strings = ImmutableList.of("A", "AA", "AAA", "B", "BB", "BBB", "C", "CC", "CCC", "ABA", "BAB", "CAC");
Map<Character, Map<Integer, List<String>>> collect = strings.stream().collect(
groupingBy(s -> s.charAt(0),
groupingBy(String::length)
)
);
Это даст следующий результат
My Map =
{
A =
{
1 = [A]
2 = [AA]
3 = [AAA, ABA]
}
B =
{
1 = [B]
2 = [BB]
3 = [BBB, BAB]
}
C =
{
1 = [C]
2 = [CC]
3 = [CCC, CAC]
}
}
На самом деле меня интересуют только списки из приведенного вышерезультаты, и я хочу сделать это в идеале как часть групповой операции.Я знаю, что это может быть сделано, например, путем зацикливания структуры результирующих карт.Но есть ли способ добиться этого с помощью потоков?
[
[A],
[AA],
[AAA, ABA],
[B],
[BB],
[BBB, BAB],
[C],
[CC],
[CCC, CAC]
]