我知道如何制作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());
创建地图,但值未扩展但被覆盖。因此,事实上我们确实注意到有一个List但只有一个对象。
最佳答案
您要执行的操作类似于LambdaJ索引方法。索引的问题是它的局限性,其文档指出:
在很多情况下,前一种索引功能就足够了,但至少
2大限制:如果2个或更多对象,则无法处理冲突
应该在相同的键值上建立索引,并且不容易
在多级层次结构中索引对象。
为了克服这些限制,lambdaj提供了一个功能
(可选)按其值对对象进行分组
属性。与往常一样,lambdaj中的首选(静态输入)方式
选择对象的属性是通过on构造,因此将一个
根据年龄列表列出以下内容即可:
组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中创建Map(值是Collection)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24125371/