【发布时间】:2019-06-28 08:15:21
【问题描述】:
我有一个输入数组
["Setra","Mercedes","Volvo","Mercedes","Skoda","Iveco","MAN",null,"Skoda","Iveco"]
预期的输出应该是
{Iveco=2, Mercedes=2, Skoda=2, MAN=1, Setra=1, Volvo=1}
表示以Vehicle 品牌为键、以值作为其出现次数的地图以及类似值的元素应按键的字母顺序和值排序。
我试过了
public static String busRanking(List<String> busModels) {
Map<String, Long> counters = busModels.stream().skip(1).filter(Objects::nonNull)
.filter(bus -> !bus.startsWith("V"))
.collect(Collectors.groupingBy(bus-> bus, Collectors.counting()));
Map<String, Long> finalMap = new LinkedHashMap<>();
counters.entrySet().stream()
.sorted(Map.Entry.comparingByValue(
Comparator.reverseOrder()))
.forEachOrdered(
e -> finalMap.put(e.getKey(),
e.getValue()));
return finalMap.toString();
}
public static void main(String[] args) {
List<String> busModels = Arrays.asList( "Setra","Mercedes","Volvo","Mercedes","Skoda","Iveco","MAN",null,"Skoda","Iveco");
String busRanking = busRanking(busModels);
System.out.println(busRanking);
}
我得到的输出
{Skoda=2, Mercedes=2, Iveco=2, Setra=1, MAN=1}
有什么建议吗?并且必须使用单流()获得输出
【问题讨论】:
-
为什么在过滤掉所有以
V开头的内容后,Volvo会是一个没有值的无效映射条目? -
... 似乎您正在使用
sorted操作中的键查找thenComparing。 -
它仍然在您的预期输出中
-
@BhabadyutiBal 您可以随时编辑问题以改进那里的信息。根据上述评论编辑了预期的输出。
标签: java java-8 java-stream