list对象数组根据两个字段去重java
时间: 2023-07-08 14:37:49 浏览: 52
假设有一个List对象数组,其中包含若干个对象,每个对象有两个字段a和b,我们需要根据这两个字段进行去重,可以采用以下的方法:
1. 定义一个HashSet,用于存储已经出现过的a和b的组合。
2. 遍历List对象数组,对于每个对象,判断它的a和b的组合是否已经在HashSet中出现过,如果没有出现过则将该组合添加到HashSet中,同时将该对象加入到一个结果List中;如果已经出现过则忽略该对象。
3. 遍历结束后,结果List中就包含了根据a和b去重后的对象数组。
下面是Java代码的示例:
```
List<Object> list = // 原始List对象数组
Set<String> set = new HashSet<>();
List<Object> result = new ArrayList<>();
for (Object obj : list) {
String key = obj.a + "-" + obj.b; // 组合a和b成为一个字符串作为HashSet的key
if (!set.contains(key)) {
set.add(key);
result.add(obj);
}
}
```
相关问题
list对象数组根据两个字段去重java使用stream流
使用Java 8的Stream API可以更简洁地实现根据两个字段去重的操作。具体步骤如下:
1. 将List对象数组转换为Stream流。
2. 使用Stream的distinct()方法,根据对象的a和b字段组合进行去重。
3. 将去重后的Stream流转换回List对象数组。
下面是Java代码示例:
```
List<Object> list = // 原始List对象数组
List<Object> result = list.stream()
.distinct()
.collect(Collectors.toList());
```
其中,distinct()方法使用对象的equals()方法进行判断两个对象是否相同,因此需要在对象类中重写equals()方法,以便正确判断对象相同的条件。例如,对于包含a和b两个字段的对象类Object,可以重写equals()方法如下:
```
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
}
if (!(obj instanceof Object)) {
return false;
}
Object other = (Object) obj;
return this.a.equals(other.a) && this.b.equals(other.b);
}
```
list对象数组根据两个属性去重java
可以使用Java 8的Stream API来根据两个属性去重List对象数组,代码如下所示:
```java
List<MyObject> distinctList = myList.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getProperty1() + "|" + o.getProperty2()))),
ArrayList::new
));
```
这里假设MyObject类有两个属性:property1和property2。该代码将根据这两个属性的组合来去重List对象数组myList,并返回去重后的结果distinctList。
阅读全文