java 8 list集合根据两个字段降序排列
时间: 2023-08-04 22:33:04 浏览: 52
假设你有一个包含对象的List集合,每个对象都有两个属性:属性A和属性B。你可以使用Java 8的Comparator来实现根据这两个属性进行降序排列,代码如下:
```java
Collections.sort(list, Comparator.comparing(Object::getA)
.thenComparing(Object::getB, Comparator.reverseOrder()));
```
其中,Comparator.comparing(Object::getA)表示先按照属性A进行排序,thenComparing(Object::getB, Comparator.reverseOrder())表示在属性A相同时,按照属性B的降序排列。
相关问题
在java 8中stream list集合根据两个字段降序排列
在Java 8中,你可以使用Stream API和Comparator来实现根据两个字段进行降序排列,代码如下:
```java
list.stream()
.sorted(Comparator.comparing(Object::getA)
.thenComparing(Object::getB, Comparator.reverseOrder()))
.collect(Collectors.toList());
```
其中,sorted()方法使用Comparator进行排序,Comparator.comparing(Object::getA)表示先按照属性A进行排序,thenComparing(Object::getB, Comparator.reverseOrder())表示在属性A相同时,按照属性B的降序排列。最后使用collect()方法将排序后的结果转换为List集合。
Java根据list集合中两个字段判重
在 Java 中可以使用 List.contains() 方法来判断一个元素是否在列表中。
但是,如果你想要根据列表中的两个字段进行判重,就需要重写 equals() 和 hashCode() 方法。
假设你有一个 Employee 类,有 name 和 age 两个字段,并且你希望根据这两个字段判断重复,那么你可以这样做:
```
class Employee {
private String name;
private int age;
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee employee = (Employee) o;
return age == employee.age &&
Objects.equals(name, employee.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
然后你就可以使用 List.contains() 方法来判断列表中是否有重复的元素了:
```
List<Employee> employees = new ArrayList<>();
employees.add(new Employee("John", 30));
employees.add(new Employee("Jane", 25));
Employee duplicate = new Employee("John", 30);
if (employees.contains(duplicate)) {
System.out.println("Found a duplicate!");
}
```
注意,上述代码中的 equals() 和 hashCode() 方法是必须的,因为 List.contains() 方法内部使用了 hashCode() 方法来比较元素是否相等。