JAVA JDK8 List分组获取第一个元素的方法

作者:Sam哥哥 时间:2021-06-24 13:07:51 

概述

在JAVA JDK8 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 ListGroupFindFirstTest3 {
 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, Coupon> resultList = couponList.stream().collect(Collectors.groupingBy(Coupon::getCouponId,Collectors.collectingAndThen(Collectors.toList(),value->value.get(0))));
   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;
 }
}

需要借助Collectors.collectingAndThen方法,对组内的元素进行处理,这里是获取第一个元素。

代码输出结果如下:

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

来源:https://blog.csdn.net/linsongbin1/article/details/84112877

标签:java,jdk,list
0
投稿

猜你喜欢

  • Spring Cloud Gateway网关XSS过滤方式

    2021-08-07 13:16:53
  • 学习使用Material Design控件(一)

    2023-07-27 13:14:06
  • MyBatis3源码解析之如何获取数据源详解

    2023-12-06 02:23:08
  • java中的前++和后++的区别示例代码详解

    2023-09-01 10:15:01
  • RabbitMQ死信机制实现延迟队列的实战

    2023-10-10 18:41:57
  • Java Ehcache缓存框架入门级使用实例

    2022-08-23 20:51:54
  • 深入理解Java中的弱引用

    2023-07-19 20:14:53
  • java获取百度网盘真实下载链接的方法

    2021-09-07 21:16:08
  • log4j2日志异步打印(实例讲解)

    2023-11-12 09:02:13
  • 在IntelliJ IDEA中多线程并发代码的调试方法详解

    2022-01-09 03:05:45
  • unity shader实现较完整光照效果

    2023-04-27 07:43:29
  • MVVM简化的Messager类实例代码

    2023-12-23 07:37:50
  • Java中的OkHttp使用教程

    2023-08-10 19:30:59
  • Mybatis-plus实现主键自增和自动注入时间的示例代码

    2022-11-05 00:22:51
  • spring boot 2.x html中引用css和js失效问题及解决方法

    2021-08-13 10:28:32
  • 浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

    2022-10-20 06:58:41
  • 在idea中将创建的java web项目部署到Tomcat中的过程图文详解

    2022-10-24 23:58:25
  • java中动态 代理的实现

    2023-11-17 16:16:25
  • Mybatis延迟加载的实现方式

    2023-08-19 11:07:32
  • 浅析Java编程中枚举类型的定义与使用

    2021-07-04 23:46:16
  • asp之家 软件编程 m.aspxhome.com