java - 如何在 LambdaJ 中创建值为 Collection 的 Map?

标签 java lambdaj

我知道如何制作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());

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

最佳答案

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

The former index feature is enough in many cases, but it has at least 2 big limitations: it doesn't manage conflicts if 2 or more objects should be indexed on the same key value and it doesn't easily allow to index the objects in a multilevel hierarchy.

To overcome these constraints lambdaj provides a feature to (optionally hierarchically) group objects on the value of their properties. As usual the preferred (statically typed) way in lambdaj to choose an object's property is via the on construct, so to group a List of Persons based on their ages it is sufficient to write:

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

关于java - 如何在 LambdaJ 中创建值为 Collection 的 Map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24125371/

相关文章:

java - 在安卓中使用 lambdaj

java - 一起使用 cipherInputStream 和 FileInputStream 进行未加密和加密访问

java - Java 中的字符串拆分不起作用?

java - Java 中的 lambdaj 和多重排序条件

LambdaJ 索引的 Java 流替代方案

java - Hamcrest - arrayOne 中的任何项目与 arrayTwo 中的任何项目匹配

java - 寻求用于套接字编程(Java 或 Python)的高级库

Java NetBeans 初学者 : Import Filesystem

java - 如何在没有 NullPointerException 的情况下返回数组对象?