我有List<Map<String, Object >>
喜欢:
[
{"code":last_name},
{"code":last_date},
{"code":task_id}
]
现在我想在List中将其转换为:
[last_name, last_date, task_id]
我已使用此代码转换此
List<Object> allCodeKeeper = new ArrayList<Object>();
for(Map<String,Object> map : list){
if(!allCodeKeeper.contains(map.get("code"))){
allCodeKeeper.add(map.get("code"));
}
}
输出:
[last_name, last_date, task_id]
但我希望使用Lambda表达式进行转换。
答案 0 :(得分:3)
试试这个:
List<Object> allCodeKeeper = list.stream().map(o -> o.get("code"))
.distinct().collect(Collectors.toList());
示例运行
List<Map<String, Object>> list = new ArrayList<>();
Map<String,Object> map1 = new HashMap<>();
map1.put("code", "last_name");
Map<String,Object> map2 = new HashMap<>();
map2.put("code", "last_date");
map2.put("code","last_name");//adding a duplicate on purpose
Map<String,Object> map3 = new HashMap<>();
map3.put("code", "task_id");
list.add(map1);
list.add(map2);
list.add(map3);
List<Object> allCodeKeeper = list.stream().map(o -> o.get("code"))
.distinct().collect(Collectors.toList());
System.out.println(allCodeKeeper);
也就是说,您最好使用Set
而不是使用List
作为结果,因为您想要消除重复值。 :
Set<Object> uniqueCodeKeeper = list.stream().map(o -> o.get("code"))
.collect(Collectors.toSet());
答案 1 :(得分:1)
如果我做对了,这看起来像是在解决你的问题。
public static void main(String[] args) throws Exception {
/*Prepare Data*/
List<Map<String , Object>> listOfMaps = new ArrayList<Map<String , Object>>();
Map<String , Object> mapOfStringToObject1 = new HashMap<String , Object>();
mapOfStringToObject1.put("code", "last_name");
Map<String , Object> mapOfStringToObject2 = new HashMap<String , Object>();
mapOfStringToObject2.put("code", "last_date");
Map<String , Object> mapOfStringToObject3 = new HashMap<String , Object>();
mapOfStringToObject3.put("code", "task_id");
listOfMaps.add(mapOfStringToObject1);
listOfMaps.add(mapOfStringToObject2);
listOfMaps.add(mapOfStringToObject3);
/*And the lambda , missed the distinct !*/
List<Object> allCodeKeeper = listOfMaps.stream().map(mapOfString -> mapOfString.values()).distinct().collect(Collectors.toList());
allCodeKeeper.forEach(System.out::println);
}
答案 2 :(得分:1)
另外要做的是
Set<Object> output= list.stream() // Stream<Map<String, Object>>
.map(Map::values) // Stream<List<Object>>
.flatMap(Collection::stream) // Stream<Object>
.collect(Collectors.toSet()); //Set<Object>