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

Posted

技术标签:

【中文标题】如何使用 Java 8 Lambda 将对象列表转换为 Map<Object, Object>【英文标题】:How to convert List of Objects into Map<Object, Object> using Java 8 Lambdas 【发布时间】:2015-11-11 06:33:51 【问题描述】:

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

    Public Class Car 
        private Integer carId;
        private Integer companyId;
        private Boolean isConvertible;
        private String carName;
        private String color;
        private BigDecimal wheelBase;
        private BigDecimal clearance;
    

我有另一个对象,我想将其视为 Map 的键。

    public class Key<L, C, R> 
        private L left;
        private C center;
        private R right; 
   

我想从汽车对象列表创建地图。

List<Car> cars;
Map<Key, Car> -> This map contains Key object created from 3 field of Car object namely carId, companyId, isConvertible.

我无法弄清楚如何使用 Java 8 Lambda 来做到这一点

cars.stream.collect(Collectors.toMap(?, (c) -> c);

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

【问题讨论】:

【参考方案1】:

你可以这样做:

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

【讨论】:

【参考方案2】:
cars.stream().collect(Collectors.toMap(c->new Key(c.getId(),...), Function.identity());

【讨论】:

【参考方案3】:

你也可以试试这个:

    Map<Key, Car> carMapper = new HashMap<>();

    carlist.forEach(car -> carMapper.put(new Key(car.getCarId(), car.getCompanyId(), car.getIsConvertible()), car));

【讨论】:

以上是关于如何使用 Java 8 Lambda 将对象列表转换为 Map<Object, Object>的主要内容,如果未能解决你的问题,请参考以下文章

java 8中列表对象多条件排序

Java 8 中的 Lambda 表达式

如果使用我的服务使用Java 8 lambda / streams列表不为空,如何从列表中删除每个元素

Java Lambda List 转 Map

将 Lambda 应用于返回另一个列表的列表的 Java 8 惯用方法?

Java 8新特性:学习如何使用Lambda表达式,一看必懂