List stream 对象 属性去重

单值去重不写了,记录对象去重

随手一个对象:

1@Data 2@AllArgsConstructor 3public class Milk { 4 private Integer key; 5 private String value; 6}

操作:

1package com.yus.util; 2 3import java.util.*; 4import java.util.stream.Collectors; 5 6import static java.util.Comparator.comparing; 7import static java.util.Comparator.comparingLong; 8import static java.util.stream.Collectors.collectingAndThen; 9import static java.util.stream.Collectors.toCollection; 10 11public class main { 12 public static void main(String[] args) { 13 Milk milk0=new Milk(0,"a"); 14 Milk milk1=new Milk(1,"b"); 15 Milk milk2=new Milk(0,"c"); 16 List<Milk> list=new ArrayList<>(); 17 list.add(milk0); 18 list.add(milk1); 19 list.add(milk2); 20 //去重 21 List<Milk> uniqueMilk = list.stream().collect( 22 collectingAndThen( 23 toCollection(() -> new TreeSet<>(comparing(n->n.getKey()))),ArrayList::new) 24 ); 25 26 for (Milk m:uniqueMilk) { 27 System.out.println(m.toString()); 28 } 29 30 } 31}

操作底层是set,视图,collection...一堆东西,还是有点意思的,不记录了,有兴趣可深入

任何Object类型去重...~

1import java.util.ArrayList; 2import java.util.HashMap; 3import java.util.List; 4import java.util.Map; 5import java.util.concurrent.ConcurrentHashMap; 6import java.util.function.Function; 7import java.util.function.Predicate; 8import java.util.stream.Collectors; 9 10public class TestMain { 11 12 public static void main(String[] args) { 13 14 List<Map<String, Object>> list = new ArrayList<>(); 15 16 Map<String, Object> map = new HashMap<>(); 17 map.put("id", "11"); 18 map.put("orderno", "No.1"); 19 list.add(map); 20 21 Map<String, Object> map1 = new HashMap<>(); 22 map1.put("id", "2222"); 23 map1.put("orderno", "No.2"); 24 list.add(map1); 25 26 Map<String, Object> map2 = new HashMap<>(); 27 map2.put("id", "33"); 28 map2.put("orderno", "No.2"); 29 list.add(map2); 30 31 Map<String, Object> map3 = new HashMap<>(); 32 map3.put("id", "444"); 33 map3.put("orderno", "No.1"); 34 list.add(map3); 35 36 List<Map<String, Object>> collect = list.stream().filter(distinctByKey(n -> n.get("orderno"))) 37 .collect(Collectors.toList()); 38 39 collect.forEach(System.out::println); 40 } 41 42 private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) { 43 ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>(); 44 return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; 45 } 46}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

List stream 对象 属性去重 - HelloWorld