1

我知道如何制作Map<String, Car>,但如何Map<String, List<Car>>在 lambdaj 中制作?

这是我想用 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());

创建地图,但值没有被扩展而是被覆盖。所以,事实上我们确实注意到有一个 List 但只有一个对象。

4

1 回答 1

1

您要做的类似于 LambdaJ索引方法。索引的问题是它的局限性,它的文档说:

前一个索引功能在许多情况下就足够了,但它至少有两个很大的限制:如果 2 个或更多对象应该在相同的键值上建立索引,它不会管理冲突,并且它不允许在多层次的层次结构。

为了克服这些限制,lambdaj 提供了一个功能,可以(可选地分层)根据对象的属性值对对象进行分组。像往常一样,在 lambdaj 中选择对象属性的首选(静态类型)方法是通过 on 构造,因此要根据年龄对人员列表进行分组,编写以下内容就足够了:

组 group = group(meAndMyFriends, by(on(Person.class).getAge()));

所以,你必须使用的是 LambdaJ groups。对于您的示例,它将是:

Group<Car> group = group(cars, by(on(Car.class).getDriver()));

您可以在这里查看分组项目: https ://code.google.com/p/lambdaj/wiki/LambdajFeatures#Grouping_items

于 2014-06-09T17:37:13.683 回答