stream去重_List stream 对象 属性去重

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

随手一个对象:

@Data

@AllArgsConstructor

public class Milk {

private Integer key;

private String value;

}

操作:

package com.yus.util;

import java.util.*;

import java.util.stream.Collectors;

import static java.util.Comparator.comparing;

import static java.util.Comparator.comparingLong;

import static java.util.stream.Collectors.collectingAndThen;

import static java.util.stream.Collectors.toCollection;

public class main {

public static void main(String[] args) {

Milk milk0=new Milk(0,"a");

Milk milk1=new Milk(1,"b");

Milk milk2=new Milk(0,"c");

List list=new ArrayList<>();

list.add(milk0);

list.add(milk1);

list.add(milk2);

//去重

List uniqueMilk = list.stream().collect(

collectingAndThen(

toCollection(() -> new TreeSet<>(comparing(n->n.getKey()))),ArrayList::new)

);

for (Milk m:uniqueMilk) {

System.out.println(m.toString());

}

}

}

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

任何Object类型去重...~

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;

public class TestMain {

public static void main(String[] args) {

List> list = new ArrayList<>();

Map map = new HashMap<>();

map.put("id", "11");

map.put("orderno", "No.1");

list.add(map);

Map map1 = new HashMap<>();

map1.put("id", "2222");

map1.put("orderno", "No.2");

list.add(map1);

Map map2 = new HashMap<>();

map2.put("id", "33");

map2.put("orderno", "No.2");

list.add(map2);

Map map3 = new HashMap<>();

map3.put("id", "444");

map3.put("orderno", "No.1");

list.add(map3);

Map>> map0 = list.stream().collect(Collectors.groupingBy(e -> e.get("orderno")));

List> collect = list.stream().filter(distinctByKey(n -> n.get("orderno")))

.collect(Collectors.toList());

collect.forEach(System.out::println);

}

private static Predicate distinctByKey(Function super T, ?> keyExtractor) {

ConcurrentHashMap map = new ConcurrentHashMap<>();

return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;

}

}

C&num; List 根据对象属性去重的四种方法对比

测试代码: private void TestDistinct() { Task.Run(() => { //生成测试数据 DateTime dt = DateTime.Now; Random ...

List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇

最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...

js对象属性 通过点&lpar;&period;&rpar; 和 方括号&lpar;&lbrack;&rsqb;&rpar; 的不同之处

//    js对象属性 通过点(.) 和 方括号([]) 的不同之处 //    1.点操作符: 静态的.右侧必须是一个以属性名称命名的简单标识符.属性名用一个标识符来表示.标识符必须直接出现再js ...

Mockito 中被 Mocked 的对象属性及方法的默认值

在 Java 测试中使用 Mockito 有段时日了,以前只是想当然的认为 Mock 的对象属性值和方法返回值都是依据同样的规则.基本类型是 0, 0.0, 或 false, 对象类型都是 null, ...

ES6 set和map数据结构对对象数组去重简单实现

自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [. ...

探究&commat;property申明对象属性时copy与strong的区别

一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...

&lbrack;源码&rsqb;Literacy 快速反射读写对象属性&comma;字段

Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但 ...

了解JavaScript 对象属性的标签

对象属性的标签 value(属性值), writable(属性可写), enumerable(属性可枚举), configurable(属性可配置), 这些属性标签使对象所持有的属性体现出不同的特性, ...

区分元素特性attribute和对象属性property

× 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是

随机推荐

Entity Framework 6 Recipes 2nd Edition(13-3)译 -&gt&semi; 为一个只读的访问获取实体

问题 你想有效地获取只是用来显示不会更新的操作的实体.另外,你想用CodeFirst的方式来实现 解决方案 一个非常常见行为,尤其是网站,就是只是让用户浏览数据.大多数情况下,用户不会更新数据.在这种 ...

解决ppt中视频不能播放的问题

小伙伴一直在纠结一个问题,有个ppt,在其他人的电脑上可以正常播放其中的视频,但是在某一个电脑上却总是不能播放,一直没找到原因,俺们今早捯饬了一下,貌似找到一丢丢原因和解决办法了. #1,疑似原因 为 ...

&lbrack;综&rsqb; PCA降维

http://blog.json.tw/using-matlab-implementing-pca-dimension-reduction 設有m筆資料, 每筆資料皆為n維, 如此可將他們視為一個mx ...

The JSP specification requires that an attribute name is preceded by whitespace

一个jsp页面在本地运行一点问题没有,发布到服务器就报错了: The JSP specification requires that an attribute name is preceded by ...

&commat;interface NSFileManager &colon; NSObject

@interface NSFileManager : NSObject NSFileManager操作: 1.文件夹创建删除 2.文件创建删除 3.清除数据缓存 以上办法都在这里:https://de ...

一些JavaScript题目

在JavaScript中,运行下面代码,sum的值是(). var sum=0;for(i=1;i<10;i++){if(i%5==0)break;sum=sum+i;} A. 40B. 50C ...

unity3d中asset store 的资源下载到本地的目录位置

来源:http://blog.csdn.net/fzhlee/article/details/8613688 C:/Users/[当前用户]/AppData/Roaming/Unity/Asset S ...

C&num; DateTime 日期加1天 减一天 加一月 减一月 等方法

//今天 DateTime.Now.Date.ToShortDateString(); //昨天,就是今天的日期减一 DateTime.Now.AddDays(-).ToShortDateString ...

OA学习笔记-010-Struts部分源码分析、Intercepter、ModelDriver、OGNL、EL

一.分析 二. 1.OGNL 在访问action前,要经过各种intercepter,其中ParameterFilterInterceptor会把各咱参数放到ValueStack里,从而使OGNL可以 ...

java中的变量

变量就是命名的内存空间 1.声明和赋值方式:数据类型   变量名 = 值: 数据类型即划分的内存空间,变量名即划分出的内存空间的名 2.变量必须先声明才能使用,不能使用一个没有经过预先声明的变量:没有 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值