如何使用Java 8 Lambdas将对象列表转换为Map <Object,Object>

vai*_*092 9 java lambda dictionary list java-8

我有对象列表说需要转换为地图的汽车.

    Public Class Car {
        private Integer carId;
        private Integer companyId;
        private Boolean isConvertible;
        private String carName;
        private String color;
        private BigDecimal wheelBase;
        private BigDecimal clearance;
    }
Run Code Online (Sandbox Code Playgroud)

我有另一个对象,我想把它当作Map的关键.

    public class Key<L, C, R> {
        private L left;
        private C center;
        private R right; 
   }
Run Code Online (Sandbox Code Playgroud)

我想从List of Car对象创建一个地图.

List<Car> cars;
Map<Key, Car> -> This map contains Key object created from 3 field of Car object namely carId, companyId, isConvertible.
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用Java 8 Lambda执行此操作

cars.stream.collect(Collectors.toMap(?, (c) -> c);
Run Code Online (Sandbox Code Playgroud)

在上面的语句中,代替?,我想使用当前car对象中存在的值创建Key类的对象.我怎样才能做到这一点?

Kon*_*kov 10

你可以做:

Function<Car, Key> mapper = car -> new Key(car.getId(), 
                                           car.getCompanyId(), 
                                           car.isConvertible());
cars.stream().collect(Collectors.toMap(mapper, Function.identity());
Run Code Online (Sandbox Code Playgroud)