1

作り方は知っていますが、ラムダジでMap<String, Car>作る方法は?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());

マップを作成しますが、値は拡張されずに上書きされます。したがって、事実上、リストはあるが単一のオブジェクトであることに注意してください。

4

1 に答える 1

1

やりたいことは、LambdaJ のindexメソッドに似ています。インデックスの問題はその制限であり、そのドキュメントには次のように記載されています。

多くの場合、前者のインデックス機能で十分ですが、少なくとも 2 つの大きな制限があります。同じキー値で 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 に答える