• JDK8 List分组


    对List进行分组是日常开发中,经常遇到的,在JDK 8中对List按照某个属性分组的代码,超级简单。

    package test;


    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.serializer.SerializerFeature;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;

    public class ListGroupTest {
    public static void main(String[] args) {
    List<Coupon> couponList = new ArrayList<>();
    Coupon coupon1 = new Coupon(1,100,"优惠券1");
    Coupon coupon2 = new Coupon(2,200,"优惠券2");
    Coupon coupon3 = new Coupon(3,300,"优惠券3");
    Coupon coupon4 = new Coupon(3,400,"优惠券4");
    couponList.add(coupon1);
    couponList.add(coupon2);
    couponList.add(coupon3);
    couponList.add(coupon4);

    Map<Integer, List<Coupon>> resultList = couponList.stream().collect(Collectors.groupingBy(Coupon::getCouponId));
    System.out.println(JSON.toJSONString(resultList, SerializerFeature.PrettyFormat));
    }

    package test;

    public class Coupon {
    private Integer couponId;
    private Integer price;
    private String name;

    public Coupon(Integer couponId, Integer price, String name) {
    this.couponId = couponId;
    this.price = price;
    this.name = name;
    }

    public Integer getCouponId() {
    return couponId;
    }

    public void setCouponId(Integer couponId) {
    this.couponId = couponId;
    }

    public Integer getPrice() {
    return price;
    }

    public void setPrice(Integer price) {
    this.price = price;
    }

    public String getName() {
    return name;
    }

    public void setName(String name) {
    this.name = name;
    }

    上面的例子是对List按照couponId分组,couponId一样的,归为一组。打印结果如下:

    {
    1:[
    {
    "couponId":1,
    "name":"优惠券1",
    "price":100
    }
    ],
    2:[
    {
    "couponId":2,
    "name":"优惠券2",
    "price":200
    }
    ],
    3:[
    {
    "couponId":3,
    "name":"优惠券3",
    "price":300
    },
    {
    "couponId":3,
    "name":"优惠券4",
    "price":400
    }
    ]

    如果分组后,分组内并不想是对象,而是对象的属性,也可以做到的。

    package test;


    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.serializer.SerializerFeature;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;

    public class ListGroupTest2 {
    public static void main(String[] args) {
    List<Coupon> couponList = new ArrayList<>();
    Coupon coupon1 = new Coupon(1,100,"优惠券1");
    Coupon coupon2 = new Coupon(2,200,"优惠券2");
    Coupon coupon3 = new Coupon(3,300,"优惠券3");
    Coupon coupon4 = new Coupon(3,400,"优惠券4");
    couponList.add(coupon1);
    couponList.add(coupon2);
    couponList.add(coupon3);
    couponList.add(coupon4);

    Map<Integer, List<String>> resultList = couponList.stream().collect(Collectors.groupingBy(Coupon::getCouponId,Collectors.mapping(Coupon::getName,Collectors.toList())));
    System.out.println(JSON.toJSONString(resultList, SerializerFeature.PrettyFormat));
    }

    这样分组内就是name属性了。打印结果如下:

    {
    1:[
    "优惠券1"
    ],
    2:[
    "优惠券2"
    ],
    3:[
    "优惠券3",
    "优惠券4"
    ]
    }
    ————————————————
    版权声明:本文为CSDN博主「Sam_Deep_Thinking」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/linsongbin1/article/details/83933703

  • 相关阅读:
    mac c++编译出现segmentation fault :11错误
    ssh 连接缓慢解决方法
    237. Delete Node in a Linked List
    203. Remove Linked List Elements
    Inversion of Control Containers and the Dependency Injection pattern
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    SxsTrace
    使用CCleaner卸载chrome
    decimal and double ToString problem
  • 原文地址:https://www.cnblogs.com/javalinux/p/16070447.html
Copyright © 2020-2023  润新知