如何将列表隐式映射到Map< T,< K,List< Person>>>使用Java Lambda吗? [英] How to covert List to Map<T, <K, List<Person>>> use java lambda?
本文介绍了如何将列表隐式映射到Map< T,< K,List< Person>>>使用Java Lambda吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何使用Java Lambda将列表转换为Map<Integer, Map<Integer, List<Person>>>
?
How to convert list to Map<Integer, Map<Integer, List<Person>>>
use java lambda?
我只知道这一点:
private static Map<Dish.Type, List<String>> groupDishNamesByType() {
return menu.stream().collect(groupingBy(Dish::getType, mapping(Dish::getName, toList())));
}
我只知道这一点:
public static <T, F> Map<F, T> listToMap(List<T> list, Function<T, F> f) {
return list.stream().collect(Collectors.toMap(f, obj -> obj));
}
但是我不知道如何使用Map作为Map中的关键.紧急情况:
But I don't know how to write use Map to be a key in Map. Pherhaps:
class Person{
int age;
int cityCode;
String name;
}
method:
// Map<age, Map<cityCode, List<Person>>>
public Map<Integer, Map<Integer, List<Person>>> covertListToMap(List<Person> list){
// TODO: How to make List<Person> to Map<age, Map<cityCode, List<Person>>>
}
Thank you floor-1 @Master chief.
But now I found the other problem:
When the build first group's key , get a key1result, I want to use it in second group, How to do it? -_-
Function<Person, Integer> key1 = (Person p) -> {
// do many sth then get a key1Result:
int key1Result = p.getAge() * new Random(10).nextInt();
return key1Result;
};
Function<Person, Integer> key2 = (Person p) -> {
// Question: how to get and use Function key1 key1Result:
int key1Result = 0;
int result = p.getCityCode() + key1Result;
return result;
};
Map<Integer, Map<Integer, List<Person>>> collect = list.stream().collect(groupingBy(key1, groupingBy(key2)));
推荐答案
Map<Integer, Map<Integer, List<Person>>> collect = personList.stream().collect(Collectors
.groupingBy(Person::getAge, Collectors.groupingBy(Person::getCityCode)));
这篇关于如何将列表隐式映射到Map< T,< K,List< Person>>>使用Java Lambda吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文