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<Milk> list=new ArrayList<>();
list.add(milk0);
list.add(milk1);
list.add(milk2);
//去重
List<Milk> 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<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> map = new HashMap<>();
map.put("id", "11");
map.put("orderno", "No.1");
list.add(map); Map<String, Object> map1 = new HashMap<>();
map1.put("id", "2222");
map1.put("orderno", "No.2");
list.add(map1); Map<String, Object> map2 = new HashMap<>();
map2.put("id", "33");
map2.put("orderno", "No.2");
list.add(map2); Map<String, Object> map3 = new HashMap<>();
map3.put("id", "444");
map3.put("orderno", "No.1");
list.add(map3); Map<Object, List<Map<String, Object>>> map0 = list.stream().collect(Collectors.groupingBy(e -> e.get("orderno"))); List<Map<String, Object>> collect = list.stream().filter(distinctByKey(n -> n.get("orderno")))
.collect(Collectors.toList()); collect.forEach(System.out::println);
} private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
ConcurrentHashMap<Object, Boolean> map = new ConcurrentHashMap<>();
return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
}
List stream 对象 属性去重的更多相关文章
- C# List 根据对象属性去重的四种方法对比
测试代码: private void TestDistinct() { Task.Run(() => { //生成测试数据 DateTime dt = DateTime.Now; Random ...
- List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇
最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...
- js对象属性 通过点(.) 和 方括号([]) 的不同之处
// 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 [. ...
- 探究@property申明对象属性时copy与strong的区别
一.问题来源 一直没有搞清楚NSString.NSArray.NSDictionary--属性描述关键字copy和strong的区别,看别人的项目中属性定义有的用copy,有的用strong.自己在开 ...
- [源码]Literacy 快速反射读写对象属性,字段
Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但 ...
- 了解JavaScript 对象属性的标签
对象属性的标签 value(属性值), writable(属性可写), enumerable(属性可枚举), configurable(属性可配置), 这些属性标签使对象所持有的属性体现出不同的特性, ...
- 区分元素特性attribute和对象属性property
× 目录 [1]定义 [2]共有 [3]例外[4]特殊[5]自定义[6]混淆[7]总结 前面的话 其实attribute和property两个单词,翻译出来都是属性,但是<javascript高 ...
随机推荐
- 浅谈Spring MVC知识
关于MVC框架,我相信大家都不陌生,都会说也就是模型-视图-控制器这三层的框架结构,如果你参加面试的时候考官会问:“MVC框架是什么?你说一说.”其实我们都知道这个问题还需要问的,只要你是一个开发人员 ...
- Spring Boot自动扫描
进行Spring Boot和Mybatis进行整合的时候,Spring Boot注解扫描的时候无法扫描到Application类的以外的包下面的注解,如下图: App就是Application类,下图 ...
- [转] h5上传视频或文件编写
Html5 finally solves an age old problem of being able to upload files while also showing the upload ...
- Zookeeper笔记(一)初识Zookeeper
为什么需要Zookeeper Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举 ...
- Shell命令 中|| &&使用
转自:https://www.cnblogs.com/aaronLinux/p/8340281.html
- C#自动生成XML文件
命名空间:using System.Xml; 程序集: System.Xml(在 System.Xml.dll 中). 涉及到的类和方法: XmlDeclaration 类:表示 XML 声明节点: ...
- ubuntu16系统中pycharm下使用git将代码提交到github仓库
1 在系统中安装git,在terminal中输入以下命令 sudo apt-get update sudo apt-get install git 2 对git进行配置,在terminal中输入以下命 ...
- js获取宽度
alert(window.screen.width );//浏览设备的分辨率(电脑.手机.平板等) alert(window.screen.availWidth );//浏览设备的实际可用宽度(电脑. ...
- vimtutor学习笔记
简介 vimtutor是vim这款知名的文本编辑器的学习工具/指南.语法如下. vimtutor [-g] [language] gvimtutor -g选项和gvimtutor是启动GUI版本的指南 ...
- Nuxt.js 如何在 asyncData中 请求数据 ,并将拿到的数据传给子组件
说明:同接口请求一样,也可以进行数据的处理:return 中 左侧的变量 可以直接拿到在页面上使用,也可以传递给子组件 下面再给出一段代码,方便觉得有用的.却又不想手敲的朋友们: async as ...