Java中有一个集合需要按照对象中的字段A作为key对应元素的下标作为value得到一个map集合若是有重复的key则忽略只保存第一个取到的下标使用stream来实现
可以使用Java 8的Stream API来实现按照对象中的字段A作为key,对应元素的下标作为value得到一个map集合的操作。以下是一种实现方式:
import java.util.*;
import java.util.stream.*;
public class Main {
public static void main(String[] args) {
List<MyObject> list = new ArrayList<>();
list.add(new MyObject("A", 1));
list.add(new MyObject("B", 2));
list.add(new MyObject("A", 3));
list.add(new MyObject("C", 4));
list.add(new MyObject("B", 5));
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(MyObject::getFieldA, list::indexOf, (a, b) -> a));
System.out.println(map);
}
}
class MyObject {
private String fieldA;
private int index;
public MyObject(String fieldA, int index) {
this.fieldA = fieldA;
this.index = index;
}
public String getFieldA() {
return fieldA;
}
public int getIndex() {
return index;
}
}
在上面的代码中,我们首先创建了一个包含MyObject对象的列表list。然后使用Stream的collect方法来将列表转换为Map。在这个方法中,我们使用MyObject::getFieldA作为key提取器,将字段A的值作为Map的key。然后使用list::indexOf作为value提取器,将元素的下标作为Map的value。最后,我们使用(a, b) -> a作为合并器来解决重复key的冲突,保留第一个取到的下标。
运行以上代码,将输出{A=0, B=1, C=3},符合预期的结果
原文地址: https://www.cveoy.top/t/topic/iFpT 著作权归作者所有。请勿转载和采集!