Java中我有一个对象集合对象中有一个字段A写一个方法使用stream获取对象集合中字段A不一样的元素下标若有字段A相同的对象则忽略只取第一个获取到的元素的下标返回一个List
你可以使用Java 8中的Stream API来实现这个方法。首先,你需要创建一个包含对象集合的List。假设你有一个名为objects的List,其中的元素类型为Object,其中包含字段A。
然后,你可以使用Stream的distinct()方法来过滤掉重复的对象,然后使用findFirst()方法获取第一个元素的下标。最后,你可以使用collect()方法将结果收集到一个新的List中。
以下是示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// 创建对象集合
List<Object> objects = new ArrayList<>();
objects.add(new MyObject("A"));
objects.add(new MyObject("B"));
objects.add(new MyObject("A"));
objects.add(new MyObject("C"));
objects.add(new MyObject("B"));
// 使用Stream获取字段A不一样的元素下标
List<Integer> indexes = getDistinctIndexes(objects);
// 输出结果
System.out.println(indexes);
}
public static List<Integer> getDistinctIndexes(List<Object> objects) {
return objects.stream()
.distinct()
.map(objects::indexOf)
.collect(Collectors.toList());
}
static class MyObject {
private String fieldA;
public MyObject(String fieldA) {
this.fieldA = fieldA;
}
public String getFieldA() {
return fieldA;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MyObject other = (MyObject) obj;
return fieldA.equals(other.fieldA);
}
@Override
public int hashCode() {
return fieldA.hashCode();
}
}
}
在上述示例中,我们创建了一个包含对象集合的List,其中对象的类型为MyObject,该对象包含字段fieldA。我们使用getDistinctIndexes()方法来获取字段fieldA不一样的元素下标。最后,我们将结果打印出来。
注意,在MyObject类中,我们重写了equals()和hashCode()方法,以确保相同字段fieldA的对象被视为相等。这是为了使distinct()方法正常工作
原文地址: https://www.cveoy.top/t/topic/iFsL 著作权归作者所有。请勿转载和采集!