我知道如何制作Map<String, Car>
但如何在lambdaj中制作Map<String, List<Car>>
?
这是我想在LambdaJ中编写的代码:
Map<String, List<Car>> driverCarsMap = new HashMap<String, List<Car>>();
for (Car car : cars)
{
String driver = car.getDriver();
if (!driverCarsMap.containsKey(driver))
driverCarsMap.put(driver, new ArrayList<Car>());
driverCarsMap.get(driver).add(car);
}
不幸的是代码:
Map<String, List<Car>> driverCarsMap = index(cars, on(Car.class).getDriver());
创建Map,但值不会被扩展但会被覆盖。所以,事实上我们注意到有一个List但是单个对象。
答案 0 :(得分:1)
您想要做的是类似于LambdaJ 索引方法。索引的问题是它的局限性,它的文档说:
以前的索引功能在很多情况下都足够了,但它至少有 2大限制:如果有2个或更多对象,它不会管理冲突 应该在相同的键值上编入索引,并且它不容易允许 索引多级层次结构中的对象。
为了克服这些限制,lambdaj提供了一个特性 (可选地,分层次地)将对象分组到它们的值上 属性。像往常一样,lambdaj中的首选(静态类型)方式 选择一个对象的属性是通过on构造,所以要分组a 基于年龄的人员名单就足够了:
Group group = group(meAndMyFriends,by(on(Person.class).getAge()));
所以,你必须使用的是LambdaJ 群组。对于您的示例,它将是:
Group<Car> group = group(cars, by(on(Car.class).getDriver()));
您可以在此处查看分组项目: https://code.google.com/p/lambdaj/wiki/LambdajFeatures#Grouping_items