如何使用 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 lambda / streams列表不为空,如何从列表中删除每个元素