当前位置: 首页 > 知识库问答 >
问题:

Java 8-按列表分组,排序并显示其总数

傅边浩
2023-03-14

我只是在使用流玩Java8中的groupingBy。我无法根据fruite的名称对水果进行排序,我还想根据fruite的名称进行排序(//1.1==>按列表分组并显示其总数)

public class StreamCollectorsGroupingByDemo {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya");

        // 1.1== >Group by a List and display the total count of it
        Map<String, Long> result = items.stream()
                .sorted()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        System.out.println("RESULT : "+result);

        // 1.2 Add sorting
        Map<String, Long> finalMap = new LinkedHashMap<>();
        result.entrySet().stream()
            .sorted(Map.Entry.<String, Long> comparingByValue()
            .reversed())
            .forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue()));
        System.out.println("FINAL RESULT : "+finalMap);
    }
}

输出为:

RESULT : {papaya=1, orange=1, banana=2, apple=3}
FINAL RESULT : {apple=3, banana=2, papaya=1, orange=1}

我想要如下所示的输出

RESULT : {apple=3,banana=2, orange=1,papaya=1}

共有1个答案

岳志义
2023-03-14

您只需使用供应商,该供应商将使用此版本的重载方法GroupingBy为您创建LinkedHashMap:

Map<String, Long> result = items.stream()
        .sorted()
        .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()));
System.out.println("RESULT : "+result);

现在的输出是:

RESULT : {apple=3, banana=2, orange=1, papaya=1}
FINAL RESULT : {apple=3, banana=2, orange=1, papaya=1}
 类似资料:
  • 根据以下答案:https://stackoverflow.com/a/30202075/8760211 如何按stud\u id对每个组进行排序,然后返回一个包含所有学生的列表,作为按stud\u位置分组的结果,然后按stud\u id排序)? 将此作为现有Lambda表达式的扩展将非常好: 我需要根据原始列表中元素的顺序进行分组。 结果如下所示: 我尝试了以下方法: 但这行不通。

  • 主要内容:1 Java8 并行数组排序的介绍,2 Java8 并行数组排序的方法,3 Java8 并行数组排序案例1,4 Java8 并行数组排序案例21 Java8 并行数组排序的介绍 Java在Array类中提供了一个新的附加功能,该功能用于对数组元素进行并行排序。java.util.Arrays包中添加了新方法,该方法使用JSR 166 Fork / Join并行公共池对数组进行并行排序。被称为parallelSort() ,并且对所有原始数据类型和Comparable对象都进行了重载。

  • 问题内容: 给定以下数据框 我想按的总和对分组()进行排序,然后按(不对)的值进行分组。所以基本上得到组的顺序 然后通过对/错,最终看起来像这样: 如何才能做到这一点? 问题答案: Groupby A: 在每个组中,对B求和,然后使用transform广播值。然后按B排序: 通过从上方传递索引来索引原始df。这将按B值的总和对A值重新排序: 最后,使用选项保留“ A”组中的“ C”值,以保留步骤1

  • 使用以下代码: 我得到: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23。 我想做的是每 10 个项目中断一次行,以便获得: 0,1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15,16,17,18,19, 20,21,22,23. 我在谷歌搜索后尝试了很多事情,但都没有成功!你能帮助我吗? 谢谢 奥

  • 我有下面的代码- 是包含int属性的类对象列表-参考号:即

  • 我有map,我想有一个列表,它按键的对应值排序(最小到最大)。我的尝试是: