Java中List泛型Map根据某一个key去重,保留一个数据。利用jdk8stream()流实现去重
前言在现实开发中关于数据展示可能需要对数据进行一些处理,比如去重。在查询以及相关接口调用后,我们会得到一个list<Map>的结果集,需要将里面的数据进行处理后展示。之前写过利用collections.sort去重,本篇文章介绍利用stream流对数据进行去重展示。先看下面demo看控制台打印如下:可以看见有两个三年级1班的数据,下面,利用stream()流处理list数据:先封装公共
·
前言
在现实开发中关于数据展示可能需要对数据进行一些处理,比如去重。在查询以及相关接口调用后,我们会得到一个list<Map>的结果集,需要将里面的数据进行处理后展示。之前写过利用collections.sort去重,本篇文章介绍利用stream流对数据进行去重展示。
先看下面demo
看控制台打印如下:
可以看见有两个三年级1班的数据,下面,利用stream()流处理list数据:
先封装公共方法:
而后调用:
查看控制台数据:
可以看见,数据已经处理成功,同理,List<DTO>也是一个用法,下面贴出代码:
package com.jsjn.skylark.service.service.wechat.xxw;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;
/**
* @author zym
* @date: 2020/6/23 14:16
*/
public class TestDistinct {
/**
* 去重结构
* @param keyExtractor
* @param <T>
* @return
*/
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
public static void main(String[] args) {
Map hashMap1 = new HashMap<>();
hashMap1.put("class","三年级1班");
hashMap1.put("age",18);
hashMap1.put("name","小张");
Map hashMap2 = new HashMap<>();
hashMap2.put("class","三年级1班");
hashMap2.put("age",18);
hashMap2.put("name","小李");
Map hashMap3 = new HashMap<>();
hashMap3.put("class","三年级2班");
hashMap3.put("age",18);
hashMap3.put("name","小红");
Map hashMap4 = new HashMap<>();
hashMap4.put("class","三年级3班");
hashMap4.put("age",18);
hashMap4.put("name","小白");
List<Map> list=new ArrayList<>();
list.add(hashMap1);
list.add(hashMap2);
list.add(hashMap3);
list.add(hashMap4);
System.out.println("根据班级名称去重前:");
for (Map map:list){
System.out.println(map.get("class"));
}
List<Map> list1 = list.stream()
.filter(distinctByKey(o -> o.get("class")))
.collect(Collectors.toList());
System.out.println("******************************************");
System.out.println("按照班级名称去重后");
for (Map map:list1){
System.out.println(map.get("class"));
}
}
}
欢迎交流。
更多推荐
已为社区贡献1条内容
所有评论(0)