Java在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
交互输入
极速运行模式,更高效的运行,点击编辑器上方的运行按钮即刻体验吧。
以下是用户最新保存的代码
for循环嵌套 发布于:2022-11-08 13:58 仿沙卡拉六级梯形金字塔(初版) 发布于:2022-11-08 10:25 测试变量变化 发布于:2022-11-06 22:18 二分查找:查找最后一个小于等于给定值的元素: 发布于:2022-11-06 00:13 二分查找:查找第一个大于等于给定值的元素: 发布于:2022-11-06 00:09 二分查找的变形 :查找最后一个值等于给定值的元素 发布于:2022-11-06 00:02 实现二分查找 发布于:2022-11-05 23:02 输出1-10之间的偶数(while) 发布于:2022-11-07 10:00 输出1-10之间所有偶数(for) 发布于:2022-11-07 10:02 输出1-10之间10个数的和 发布于:2022-11-05 16:06 输出1-10之间的10个整数 发布于:2022-11-05 16:04 跨银行交易系统 发布于:2022-11-05 15:40 收支系统verson 1.0 发布于:2022-11-05 14:09 求1到100奇数的和 发布于:2022-11-05 11:02 测试代码。 发布于:2022-11-04 09:35 交互输入一个三位数,分别输出这个三位数的个位、十位、百位。 发布于:2022-11-03 15:53 输入账户判断 发布于:2022-11-03 15:23 年轻人,你还是太嫩了 发布于:2022-11-03 13:04 空心金字塔 发布于:2022-11-02 15:58 我女神丽丽 发布于:2022-11-01 15:58 计数排序:2 5 3 0 2 3 0 3 发布于:2022-11-01 12:42 桶排序:78 17 39 26 72 94 21 12 23 68 发布于:2022-11-01 11:34 java用treeset集合实现不重复的数列 发布于:2022-11-01 08:42 获取用户信息 发布于:2022-10-31 12:22 ArrayList类银行取款 发布于:2022-10-31 11:54 FinalShell的离线机器码 发布于:2022-10-30 12:06 AAB前身代码 发布于:2022-10-29 20:35 查找AAB类型单词 发布于:2022-10-29 20:21 松岛枫是的肤色饭 发布于:2022-10-28 15:23 二维数组式 发布于:2022-10-26 20:24 java List 排序 数字字符串 发布于:2022-10-25 09:34 网络报文加密解密 发布于:2022-10-24 18:17 字符串变形 发布于:2022-10-24 18:16 归并排序实现 发布于:2022-10-23 22:34 快速排序实现: 发布于:2022-10-23 21:48 混合项目测试 发布于:2022-10-23 21:33 奇偶数之和判断 发布于:2022-10-23 20:25 解题:跳跃游戏(优先队列,大堆) 发布于:2022-10-23 17:03 分治法2-10-15-课堂练习-md.6 发布于:2022-10-20 19:58 java实现员工工资管理系统 发布于:2022-10-19 10:41 回文数递归法 发布于:2022-10-18 22:09 回文数递推法 发布于:2022-10-18 22:08 农民分土地 发布于:2022-10-18 16:07 字符串的输入,字符出现次数 发布于:2022-10-17 20:47 元音字母小写 发布于:2022-10-17 20:12 农民分土地递推实现: 发布于:2022-10-15 13:23 数组累加递推实现: 发布于:2022-10-15 13:15 数组累加递归实现: 发布于:2022-10-15 13:03 农民分土地递归实现: 发布于:2022-10-15 12:55 设计一个输出如下形式数值的递归算法 n n n n n … n … 3 3 3 2 2 1 发布于:2022-10-15 00:58 [更多]
显示目录

Java 8 – Stream Collectors groupingBy 示例



在这篇教程中,将向你展示如何使用Java 8 Stream的Collectors,来对一个List进行分组,计算个数,求和以及排序。

1. Group By, Count and Sort

1.1 对一个List进行分组,并显示每组的个数

Java8Example1.java

package com.mkyong.java8;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Java8Example1 {

    public static void main(String[] args) {

        //3 apple, 2 banana, others 1
        List<string> items =
                Arrays.asList("apple", "apple", "banana",
                        "apple", "orange", "banana", "papaya");

        Map<string, long=""> result =
                items.stream().collect(
                        Collectors.groupingBy(
                                Function.identity(), Collectors.counting()
                        )
                );

        System.out.println(result);


    }
}

output

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

1.2 加入排序

Java8Example2.java

package com.mkyong.java8;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Java8Example2 {

    public static void main(String[] args) {

        //3 apple, 2 banana, others 1
        List<string> items =
                Arrays.asList("apple", "apple", "banana",
                        "apple", "orange", "banana", "papaya");

        Map<string, long=""> result =
                items.stream().collect(
                        Collectors.groupingBy(
                                Function.identity(), Collectors.counting()
                        )
                );

        Map<string, long=""> finalMap = new LinkedHashMap&lt;&gt;();

        //Sort a map and add to finalMap
        result.entrySet().stream()
                .sorted(Map.Entry.<string, long="">comparingByValue()
                        .reversed()).forEachOrdered(e -&gt; finalMap.put(e.getKey(), e.getValue()));

        System.out.println(finalMap);


    }
}

output

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

2. List Objects

对用户定义的对象数组进行分组的例子。

2.1 一个简单java对象.

Item.java

package com.mkyong.java8;

import java.math.BigDecimal;

public class Item {

    private String name;
    private int qty;
    private BigDecimal price;

    //constructors, getter/setters 
}

2.2 通过name属性分组,并显示分组个数或Qty属性的数量

Java8Examples3.java

package com.mkyong.java8;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Java8Examples3 {

    public static void main(String[] args) {

        //3 apple, 2 banana, others 1
        List<item> items = Arrays.asList(
                new Item("apple", 10, new BigDecimal("9.99")),
                new Item("banana", 20, new BigDecimal("19.99")),
                new Item("orang", 10, new BigDecimal("29.99")),
                new Item("watermelon", 10, new BigDecimal("29.99")),
                new Item("papaya", 20, new BigDecimal("9.99")),
                new Item("apple", 10, new BigDecimal("9.99")),
                new Item("banana", 10, new BigDecimal("19.99")),
                new Item("apple", 20, new BigDecimal("9.99"))
        );

        Map<string, long=""> counting = items.stream().collect(
                Collectors.groupingBy(Item::getName, Collectors.counting()));

        System.out.println(counting);

        Map<string, integer=""> sum = items.stream().collect(
                Collectors.groupingBy(Item::getName, Collectors.summingInt(Item::getQty)));

        System.out.println(sum);

    }
}

output

//Group by + Count
{
    papaya=1, banana=2, apple=3, orang=1, watermelon=1
}

//Group by + Sum qty
{
    papaya=20, banana=30, apple=40, orang=10, watermelon=10
}

2.2 通过Price分组 – 使用Collectors.groupingByCollectors.mapping 的例子.

Java8Examples4.java

package com.mkyong.java8;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

public class Java8Examples4 {

    public static void main(String[] args) {

        //3 apple, 2 banana, others 1
        List<item> items = Arrays.asList(
                new Item("apple", 10, new BigDecimal("9.99")),
                new Item("banana", 20, new BigDecimal("19.99")),
                new Item("orang", 10, new BigDecimal("29.99")),
                new Item("watermelon", 10, new BigDecimal("29.99")),
                new Item("papaya", 20, new BigDecimal("9.99")),
                new Item("apple", 10, new BigDecimal("9.99")),
                new Item("banana", 10, new BigDecimal("19.99")),
                new Item("apple", 20, new BigDecimal("9.99"))
                );

        //group by price
        Map<BigDecimal, List<Item>> groupByPriceMap = 
            items.stream().collect(Collectors.groupingBy(Item::getPrice));

        System.out.println(groupByPriceMap);

        // group by price, uses 'mapping' to convert List<Item> to Set<String>
        Map<BigDecimal, Set<String>> result =
                items.stream().collect(
                        Collectors.groupingBy(Item::getPrice,
                                Collectors.mapping(Item::getName, Collectors.toSet())
                        )
                );

        System.out.println(result);

    }
}

output

{
    19.99=[
            Item{name='banana', qty=20, price=19.99}, 
            Item{name='banana', qty=10, price=19.99}
        ], 
    29.99=[
            Item{name='orang', qty=10, price=29.99}, 
            Item{name='watermelon', qty=10, price=29.99}
        ], 
    9.99=[
            Item{name='apple', qty=10, price=9.99}, 
            Item{name='papaya', qty=20, price=9.99}, 
            Item{name='apple', qty=10, price=9.99}, 
            Item{name='apple', qty=20, price=9.99}
        ]
}

//group by + mapping to Set
{
    19.99=[banana], 
    29.99=[orang, watermelon], 
    9.99=[papaya, apple]
}

References

  1. Java 8 Stream Collectors JavaDoc
  2. Java – How to sort a Map
  3. [Stackoverflow – Sort a Map by values (Java) ][Stackoverflow _ Sort a Map by values Java]

[Stackoverflow _ Sort a Map by values Java]: http://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java

由JSRUN为你提供的Java在线运行、在线编译工具
        JSRUN提供的Java 在线运行,Java 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。

title

使用此草稿 删除草稿

  • 00:23
注册登录后可减少验证码的弹出,点击前往 注册 | 登录

皮肤:

运行模式:

嵌入代码 iframe嵌入:


服务器已安装大部分常用的依赖库,但仍会存在一些未被安装的库, 可以通过本窗口立即安装所需依赖库,请确保库名正确,否则无法安装成功。


请输入依赖库的名称:

请选择语言: