首页 > 解决方案 > 按顺序识别列表打印中的重复项

问题描述

我有一个ArrayList,一个Java的Collection类,如下:

ArrayList<String> animals = new ArrayList<String>();
animals.add("bat");
animals.add("owl");
animals.add("bat");
animals.add("bat");

在上述动物列表中,每个唯一的动物名称应与出现次数一起排序。例如:蝙蝠名称出现 3 次,猫头鹰名称出现 1 次。预期输出应该是:

1:bat
2:bat
3:bat                                                                                                                                               
1:owl 

谁能帮我用java做编码

标签: java

解决方案


您可以轻松地从Map生成的输出中获得所需的输出。

Map<String, Long> counts =
    animals.stream()
           .collect(Collectors.groupingBy(e -> e, Collectors.counting()));
counts.forEach((k, v) -> LongStream.range(1,v+1).forEach(i -> System.out.println(i + ":" + k)));

编辑:由于Collectors.counting()返回Long,我不得不切换到LongStream.

如果您愿意,可以Integer按如下方式使用 s:

Map<String, Integer> counts =
    animals.stream()
           .collect(Collectors.groupingBy(e -> e, Collectors.summingInt(s -> 1)));
counts.forEach((k, v) -> IntStream.range(1,v+1).forEach(i -> System.out.println(i + ":" + k)));

无论哪种方式,输出都是:

1:bat
2:bat
3:bat
1:owl

推荐阅读