如何在LambdaJ中创建Map,其中value是Collection?

时间:2014-06-09 17:16:39

标签: java lambdaj

我知道如何制作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但是单个对象。

1 个答案:

答案 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