Java8 stream 根据对象字段去重_isyoungboy的博客-程序员秘密_stream根据字段去重

技术标签: Java  Java8Stream 去重  Java8  unique  Stream  

public class Java8StreamTest {

    public static class Book{

        private String id;

        private String name;

        public Book(String id, String name) {
            this.id = id;
            this.name = name;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Book{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                '}';
        }
    }

    @Test
    public void testUnique(){
        List<Book> books = Lists.newArrayList(new Book("1","1"),new Book("2","2"),new Book("3","3"),new Book("2","2"));

		//使用TreeSet去重
        List<Book> unique1 = books.stream().collect(
                collectingAndThen(toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getId()))),
                        ArrayList::new));

        System.out.println(unique1);

		//使用map去重
        List<Book> unique2 = books.stream()
                .filter(distinctByKey(o -> o.getId()))
                .collect(Collectors.toList());
        System.out.println(unique2);

    }

    public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
        Map<Object, Boolean> seen = new ConcurrentHashMap<>();
        System.out.println("这个函数将应用到每一个item");
        return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/isyoungboy/article/details/89454177

智能推荐

横向滚动_2198473308的博客-程序员秘密

list=new ArrayList();        list.add("推荐");        list.add("要闻");        list.add("视频");        list.add("娱乐");        list.add("汽车");        list.add("科技");        list.add("图片"); 

016 ppp authentication_weixin_30444105的博客-程序员秘密

Press RETURN to get started!Router&gt;enRouter#config tEnter configuration commands, one per line. End with CNTL/Z.Router(config)#hostname r0r0(config)#int s0/0r0(config-if)#no s...

python3.7+opencv3.4.1_weixin_30932215的博客-程序员秘密

https://solarianprogrammer.com/2016/09/17/install-opencv-3-with-python-3-on-windows/https://www.cnblogs.com/yuanzm/p/4089856.html pip installhttps://blog.csdn.net/qq_41670196/article/details/793...

linux 3.10 kernel src 编译,linux内核编译详解_weixin_39765057的博客-程序员秘密

一、内核简介内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。linux的一个重要的特点就是其源代码的公开性,所有的内核源程序都可以在/usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计的,你都可以获取相应的源程序代码。全世界任何一个软件工程师都可以将自己认为优秀的代码加入到其中,由此引发的一个明显的好处就是Linu...

Postgresql AutoVacuum系统自动清理进程_siwluxuefeng的博客-程序员秘密

《PostgreSQL数据库内核分析》第2章PostgreSQL的体系结构,本章从宏观上对PostgreSQL的控制和处理流程进行了简要介绍,说明了各个模块之间是如何协同工作,以使得整个数据库系统能够稳定、正确地处理用户的各种操作和请求的。至于每个模块是如何各司其职,其内部具体是如何运作的,将会在后续的章节进行专门的介绍。本节为大家介绍AutoVacuum系统自动清理进程。AD:51CTO

随便推点

Java中List遍历的几个问题_blockbox的博客-程序员秘密

1》Lambda表达式中Stream.forEach()简单问题中return 、break、continue使用; 2. Lambda表达式中Stream.forEach()的效率问题;public class MainActivity extends AppCompatActivity { @BindView(R.id.button_a) Button buttonA;...

今天通过了 AWS 的 SAA 认证考试了_海力布的博客-程序员秘密

今天上午参加了AWS Certified Solutions Architect - Associate的认证考试,并通过了,呵呵。发贴留念。

8天入门wpf—— 第二天 xaml详解_ibmfashion的博客-程序员秘密

首先我们还是新建一个空项目,看一下VS给我们默认生成的xaml结构。Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsof

ES6 极简教程(ES6 Tutorial) 文 / 东海陈光剑_禅与计算机程序设计艺术的博客-程序员秘密

ES6 极简教程(ES6 Tutorial)文 / 东海陈光剑ECMAScript简介JavaScript是ECMAScript的实现和扩展,由ECMA(一个类似W3C的标准组织)参与进行标准化。ECMAScript定义了:语言语法 – 语法解析规则、关键字、语句、声明、运算符等。类型 – 布尔型、数字、字符串、对象等。原型和继承内建对象和...

一文带你了解maven依赖中的scope选项_零度念者的博客-程序员秘密

compile(默认选项):表示为当前依赖参与项目的编译、测试和运行阶段,scope的默认选项。&lt;dependency&gt; &lt;groupId&gt;org.springframework.cloud&lt;/groupId&gt; &lt;artifactId&gt;spring-cloud-dependencies&lt;/artifactId&gt;&lt;/dependency&gt;test :表示为当前依赖只参与测试阶段。&lt;dependency&gt;

Spring data JPA java.lang.IllegalArgumentException: Not an entity_iteye_12442的博客-程序员秘密

将 entity 单独放在一个项目中,打包成  abc.jar 放到web项目中,提示 错误   aused by: java.lang.IllegalArgumentException: Not an entity: class com.classify.model.Classify    at org.hibernate.ejb.metamodel.MetamodelImp...

推荐文章

热门文章

相关标签