gpt4 book ai didi

java - 使用 lambda 和流表达代码块的简洁方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:12:55 24 4
gpt4 key购买 nike

嗨,我有一段代码,可以将一种窗口对象的列表转换为另一种窗口对象,并将其填充到 map 中,并以 id 为键。可能存在多个具有相同 id 但具有不同名称和属性的对象实例。我正在做的是获取一个列表 [W1(1,2,3), W1(2,3,4), W2(1,3,4)...] 并将其转换为映射 [ 键 W1 ,值 (1,2,3), (2,3,4) 键 W2,.... ]

这是代码片段...

    List<LinWin> list = winDao.get.....

Map<Long, List<MacWin>> res = new HashMap<>();
for (LinWin mw : list) {

List<MacWin> l2 = res.get(mw.getId());
if (l2 == null) {
l2 = new ArrayList<>();
res.put(mw.getId(), l2);
}
l2.add(new MacWin(mw.getName(), mw.getVendor(), mw.isFixed()));
}

返回结果

我想知道是否可以使用流和 lambda 来折叠它。

list.stream().collect(Collectors.toMap(.....

最佳答案

如果您有一个可以从 LinWin 转换为 MacWin 的方法(要么使其静态,要么为 MacWin 创建一个接受 LinWin 作为输入的构造函数),这确实可以简化。我将在这里生成一个静态方法:

private static MacWin of(LinWin lw){
return new MacWin(mw.getName(), mw.getVendor(), mw.isFixed());
}

以后的用法是(我在这里不使用流,因为在这种情况下,在没有流的情况下做事情对我来说看起来更容易):

Map<Long, List<MacWin>> res = new HashMap<>();
mw.forEach(x -> res.computeIfAbsent(mw.getId(), y -> new ArrayList<>()).add(of(x)));

关于java - 使用 lambda 和流表达代码块的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52105433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com