【问题标题】:Remove duplicates from a list of objects based on different case String property in Java 8 [duplicate]根据 Java 8 中的不同大小写字符串属性从对象列表中删除重复项 [重复]
【发布时间】:2018-04-27 08:37:13
【问题描述】:

如何根据 Java 8 中的“String”属性从对象列表中删除重复项? 我只能找到 Int 或 long 属性的代码,但当字符串是差异大小写并获取唯一列表时无法找到字符串比较。

以下是我想要实现的程序。

public class Diggu {

    class Employee{
        private int id;
        private String name;
        public Employee(int id, String name){
            this.id = id;
            this.name = name;
        }

        public int getId() {
            return id;
        }

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

        public String getName() {
            return name;
        }

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



    }

    public void ra(){
        List<Employee> employee = Arrays.asList(new Employee(1, "John"), new Employee(3, "JOHN"), new Employee(2, "BOB"));
        System.out.println(""+ employee.size());
        List<Employee> unique = employee.stream()
                                .collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparing(Employee::getName))),
                                                           ArrayList::new));
        System.out.println(""+ unique.size());
    }
    public static void main(String[] args) {
        new Diggu().ra();
    }
}

结果:

run:
3
3
BUILD SUCCESSFUL (total time: 2 seconds)

应该在哪里 3 和 2

【问题讨论】:

  • @HadiJ:在上述情况下,当 String 是不同的情况时,如何使用它?
  • @Oleksandr:我试过 List unique2 = employee.stream().filter(distinctByKey(Employee::getName))
  • 我认为comparing 调用equals() 方法。但是你想调用equalsIgnoreCase() 方法。更改代码以调用正确的方法
  • How much research effort is expected of Stack Overflow users? 答案,“很多。一个荒谬的数量。超过你认为你的能力。在你到达你的绳索的尽头和没有的痛苦之后答案超过了发布您的问题所带来的大量耻辱,那时您可以继续提问。因为到那时,您将完成任何必要的研究,使其成为一个值得提出的好问题!”跨度>
  • 我正在寻找的重复问题中没有提到这个 CASE_INSENSITIVE_ORDER 事情。甚至另一个与 Java 8 无关的重复问题。对问题进行了一些编辑以显示动机。此外,我创建的程序也来自对 stackoverflow 的研究。即使我测试了重复的问题场景但没有成功。谢谢

标签: java lambda java-8 string-comparison


【解决方案1】:

JohnJOHN 是不同的字符串,使用不区分大小写的Comparator

 Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多