Java中有一个集合对象中有一个字段为A使用stream来实现获取A不同的对象的下标集合若是有相同字段A的则忽略只取第一个获取的
您可以使用Java中的Stream来实现获取字段A不同的对象的下标集合,并忽略具有相同字段A的对象,只取第一个获取到的对象。
假设您有一个对象列表List
- 使用IntStream.range()方法创建一个表示索引的IntStream。
- 使用filter()方法过滤掉具有相同字段A的对象。
- 使用findFirst()方法获取第一个满足条件的对象。
- 使用orElse()方法指定如果找不到满足条件的对象时返回的默认值。
- 使用collect()方法将IntStream转换为List
类型的集合。
下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<MyObject> objects = new ArrayList<>();
objects.add(new MyObject("A"));
objects.add(new MyObject("B"));
objects.add(new MyObject("A"));
objects.add(new MyObject("C"));
List<Integer> indexes = IntStream.range(0, objects.size())
.filter(i -> {
String fieldValue = objects.get(i).getFieldA();
return objects.stream()
.noneMatch(obj -> obj.getFieldA().equals(fieldValue));
})
.findFirst()
.stream()
.collect(Collectors.toList());
System.out.println("Indexes: " + indexes);
}
static class MyObject {
private String fieldA;
public MyObject(String fieldA) {
this.fieldA = fieldA;
}
public String getFieldA() {
return fieldA;
}
}
}
在上面的示例中,我们创建了一个包含四个MyObject对象的列表。使用Stream操作,我们过滤掉具有相同字段A的对象,并获取第一个满足条件的对象的索引。最后,我们将索引集合打印出来。
输出结果为:Indexes: [0, 1, 3],表示第一个满足条件的不同字段A的对象的索引集合为0、1和3
原文地址: https://www.cveoy.top/t/topic/iFqL 著作权归作者所有。请勿转载和采集!