java8 List根据对象中属性去重-多属性去重-去除重复字符串

简介: java8 List根据对象中属性去重-多属性去重-去除重复字符串

一、根据对象中属性去重

/**
     * java8 list<java bean>去重
     */
    @Test
    public void listRemoveDuplication() {
        List<User> users = new ArrayList<>();
        users.add(new User(1L, "aa", "aa"));
        users.add(new User(1L, "aa", "bb"));
        users.add(new User(1L, "aa", "cc"));
        users = users.stream().collect(
                collectingAndThen(
                        toCollection(
                                () -> new TreeSet<>(Comparator.comparing(User::getId))), ArrayList::new
                )
        );
        for (User user : users) {
            System.out.println(user);
        }
    }

61eb714b16a94b9e8979fe5cfeb34e9e.png

二、根据对象中多个属性去重

f5ed8a9cf41d46f785c845947d517900.png

  /**
     * java8 list<java bean> 根据多个bean属性去重
     * 根据属性id和pwd去重,满足id和pwd都一致时,视为相同属性
     */
    @Test
    public void listRemoveDuplication2() {
        List<User> users = new ArrayList<>();
        users.add(new User(1L, "aa", "aa"));
        users.add(new User(1L, "aa", "bb"));
        users.add(new User(1L, "aa", "cc"));
        users = users.stream().collect(
                Collectors.collectingAndThen(
                        Collectors.toCollection(
                                () -> new TreeSet<>(
                                        Comparator.comparing(
                                                o -> o.getId()
                                                        + ";"
                                                        + o.getPwd()
                                        )
                                )
                        ), ArrayList::new
                )
        );
        for (User user : users) {
            System.out.println(user);
        }
    }

f5ed8a9cf41d46f785c845947d517900.png

三、java8 去除重复字符串

    /**
     * java8 list<String> 去除重复的string
     */
    @Test
    public void stringRemoveDuplication() {
        List<String> strings = new ArrayList<>();
        strings.add("aa");
        strings.add("aa");
        strings.add("bb");
        strings.add("cc");
        strings = strings.stream().distinct().collect(Collectors.toList());
        for (String str : strings) {
            System.out.println(str);
        }
    }

b530cce227c94bafb638550a555e4c5f.png

相关文章
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
153 83
|
6天前
|
Java
java代码优化:判断内聚到实体对象中和构造上下文对象传递参数
通过两个常见的java后端实例场景探讨代码优化,代码不是优化出来的,而是设计出来的,我们永远不可能有专门的时间去做代码优化,优化和设计在平时
24 15
|
2月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
116 60
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
64 26
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
70 8
|
2月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
56 6
|
2月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
63 0
|
8月前
|
存储 XML 缓存
Java字符串内幕:String、StringBuffer和StringBuilder的奥秘
Java字符串内幕:String、StringBuffer和StringBuilder的奥秘
80 0
|
5月前
|
安全 Java API
【Java字符串操作秘籍】StringBuffer与StringBuilder的终极对决!
【8月更文挑战第25天】在Java中处理字符串时,经常需要修改字符串,但由于`String`对象的不可变性,频繁修改会导致内存浪费和性能下降。为此,Java提供了`StringBuffer`和`StringBuilder`两个类来操作可变字符串序列。`StringBuffer`是线程安全的,适用于多线程环境,但性能略低;`StringBuilder`非线程安全,但在单线程环境中性能更优。两者基本用法相似,通过`append`等方法构建和修改字符串。
78 1