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高 ...
随机推荐
- ef 数据库连接字符串加密
public testContext() : base(GetConnection(), true) { } public static DbConnection GetConnection() { ...
- 两个用于win7任务栏显示进度的dll
Microsoft.WindowsAPICodePack.dll 和Microsoft.WindowsAPICodePack.Shell.dll 下载 参考:http://blog.csdn.net/ ...
- hdu 4513 最长不下降回文序列【manacher】
<题目链接> 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形 ...
- H5即时通讯Websocket
/** * Created by admin on 2017/8/19. */ // import Vue from 'vue' // import axios from './HTTP.js' // ...
- 深度学习中 droupout层是咋回事??
参考这篇博文 博主写的非常好! https://blog.csdn.net/program_developer/article/details/80737724 参考这篇博文 博主写的非常好! ...
- BZOJ.4361.isn(DP 树状数组 容斥)
题目链接 长度为\(i\)的不降子序列个数是可以DP求的. 用\(f[i][j]\)表示长度为\(i\),结尾元素为\(a_j\)的不降子序列个数.转移为\(f[i][j]=\sum f[i-1][k ...
- 使用TVTK库创建一个矩形视图
from tvtk.api import tvtk # s=tvtk.ConeSource(height=,radius=) # print(s.center) #创建一个长方体数据源,并同时设置长宽 ...
- GC日志
JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时 ...
- linux 关于时间日期date
一.查看和修改Linux的时区 1. 查看当前时区 命令 : "date -R" 2. 修改设置Linux服务器时区 方法 A 命令 : "tzselect" ...
- 未能加载文件或程序集“Benlai.SOA.Framework.Common, Version=1.4.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
未能加载文件或程序集“Benlai.SOA.Framework.Common, Version=1.4.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个 ...