Java查询list两个字段重复
时间: 2023-05-24 08:02:10 浏览: 284
在Java中,您可以使用以下代码来查询List中有哪些元素的两个字段重复:
```
List<YourType> list = new ArrayList<>();
Set<YourType> set = new HashSet<>();
for (YourType element : list) {
if (!set.add(element)) {
// element is a duplicate
}
}
```
上面的代码使用Java的`Set`数据结构来保存已经出现过的元素。如果将元素添加到`Set`中时返回了`false`,则说明元素在`Set`中已经存在,因此它是一个重复元素。
注意,要正确地使用这段代码,您需要重写`YourType`类的`hashCode`和`equals`方法,使其能够根据两个字段判断两个元素是否相同。
相关问题
java list 两个字段排序
可以使用Java8的Comparator来实现对List中的对象按照两个字段进行排序。
假设有一个对象Person,其中包含两个字段name和age,现在需要按照name升序排列,如果name相同则按照age降序排列。可以使用如下代码:
```
List<Person> list = new ArrayList<>();
// 添加Person对象到list中
// 按照name升序排序,如果name相同则按照age降序排序
list.sort(Comparator.comparing(Person::getName)
.thenComparing(Comparator.comparing(Person::getAge).reversed()));
```
其中,Comparator.comparing(Person::getName)表示按照name升序排序,thenComparing()方法表示如果name相同则按照后面的Comparator进行排序,Comparator.comparing(Person::getAge).reversed()表示按照age降序排序。
这样,list中的Person对象就按照name升序排列,如果name相同则按照age降序排列了。
Java代码用两个字段对比两个list
假设有两个List,每个List中的元素都是一个自定义对象,该对象有两个字段,分别为fieldA和fieldB。现在需要比较这两个List中每个对象的fieldA和fieldB是否相等。
可以使用Java 8的Stream API来完成这个任务,代码如下:
```java
public boolean compareTwoLists(List<MyObject> list1, List<MyObject> list2) {
// 如果两个List的长度不同,直接返回false
if (list1.size() != list2.size()) {
return false;
}
// 使用Stream API遍历List中的每个对象,并逐一对比fieldA和fieldB是否相等
return IntStream.range(0, list1.size())
.allMatch(i -> Objects.equals(list1.get(i).getFieldA(), list2.get(i).getFieldA())
&& Objects.equals(list1.get(i).getFieldB(), list2.get(i).getFieldB()));
}
```
其中,Objects.equals()方法可以比较两个对象是否相等,包括当对象为null的情况。allMatch()方法会检查Stream中的所有元素是否都满足给定的条件,如果都满足,则返回true,否则返回false。IntStream.range()方法可以生成一个整数范围的Stream,用于遍历List中的每个对象。