java如何使用收集器。groupingBy具有哈希映射值
我最近开始学习Streams和Lambda表达式,但我的代码遇到了问题
我有一个名字列表,我想根据它们的长度和数量对它们进行分组,我必须使用收集器。groupingBy()两次:
public class StreamApplicationDemo {
public static void main(String[] args) {
List<String> names = new ArrayList<>
(Arrays.asList("Amir", "Hatef","Mehran", "Mojtaba",
"Mohammad", "Ali", "Davood", "Reza", "Mohsen"));
Map<Integer, List<String>> groupByLengthMap = names.
stream().
collect(Collectors.groupingBy(name -> name.length()));
System.out.println(groupByLengthMap);
Map<Integer, Long> groupByLengthNumberMap = names.
stream().
collect(Collectors.groupingBy(name -> name.length(),
Collectors.counting()));
System.out.println(groupByLengthNumberMap);
}
}
输出:
{3=[Ali], 4=[Amir, Reza], 5=[Hatef], 6=[Mehran, Davood, Mohsen], 7=[Mojtaba], 8=
[Mohammad]}
{3=1, 4=2, 5=1, 6=3, 7=1, 8=1}
如您所见,我使用Streams终端方法(Collect())按名称的长度对列表进行分组,然后我不得不另一次对列表进行分组,并根据名称的长度和编号对其进行映射。 但我想合并这两个分组,并这样做:
{3{1=[Ali]},4{2=[Amir,Reza]}…}
正如你所看到的,我想要一个以单词长度为键的地图,一个单词计数的地图,一个单词列表作为键的值:
地图<;整数,Map<;整数,列表>&燃气轮机
但是,我不知道如何仅通过使用Collect()和groupingBy()方法来实现这一点,该方法使用函数作为输入。有可能吗? 提前谢谢
# 1 楼答案
试试这个
输出: