在Java8中,根据不同的大小写字符串属性从对象列表中删除重复项
在Java8中,如何基于“String”属性从对象列表中删除重复项? 我只能找到Int或long属性的代码,但当字符串大小写不同并获得唯一列表时,无法找到字符串比较 以下是我试图实现的计划在Java8中,根据不同的大小写字符串属性从对象列表中删除重复项,java,lambda,java-8,string-comparison,Java,Lambda,Java 8,String Comparison,在Java8中,如何基于“String”属性从对象列表中删除重复项? 我只能找到Int或long属性的代码,但当字符串大小写不同并获得唯一列表时,无法找到字符串比较 以下是我试图实现的计划 public class Diggu { class Employee{ private int id; private String name; public Employee(int id, String name){ th
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();
}
}
如果它应该是3和2,John和John是不同的字符串,请使用不区分大小写的比较器
Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)
@HadiJ:当字符串的大小写不同时,如何在上述情况下使用它?@Oleksandr:我尝试了List unique2=employee.stream().filter(distinctByKey(employee::getName)),我想
比较调用equals()
方法。但是您想调用equalsIgnoreCase()
方法。更改代码以调用正确的方法来获得答案,“很多。荒谬的数目。比你想象的要多。当你已经走到了尽头,没有答案的痛苦超过了发帖所带来的巨大耻辱,这时你可以继续提问。因为在那一点上,你将做任何必要的研究,使它成为一个值得问的好问题!“我正在寻找的重复问题中没有提到这个不区分大小写的问题。甚至还有另一个与Java 8无关的重复问题。问题被编辑了一点以显示动机。我创建的程序也是从stackoverflow的研究中创建的。即使我测试了重复问题场景,但没有成功。谢谢
Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)