【发布时间】:2018-12-09 08:37:30
【问题描述】:
我最近接触了 Java 8 及其 Stream API,最近又接触了它的 Collectors API,我发现它有潜力对流进行许多转换,但我有一种情况我没有确定是否可以使用 java 8 甚至可能。我有两个课程:
public class ClassA{
public int group
public int id
public String title
public String description
public String keyword
public String specialValue
}
public class ClassB{
public String newTitle
public String joinedDescriptions
}
我想知道是否可以从 ClassA 对象列表生成 ClassB 对象的分组列表,其值是从 ClassA 的字段中计算出来的。具体来说:
- 通过 group 和 id 的组合对 ClassA 进行分组
- 当关键字 = 1 时,分组的 ClassB 实例将有一个 newTitle = title,或者当关键字 = 2 时有一个 newTitle = specialValue
- 最后加入Descriptions,是来自分组的ClassA实例的所有描述的串联。
我知道可以使用 Collectors 的 groupingBy 使用排序 classA -> String.valueOf(classA.group) + String.valueOf(classA.id) 或类似的 lambda 对 ClassA 实例进行分组,但我不'不知道为每个分组实例实现其他计算值。
我希望它解释得足够清楚。
【问题讨论】:
-
预期的输出是什么?
Map<Integer,Map<Integer,ClassB>>?并且根据ClassA的哪个实例来确定对应ClassB的newTitle(因为同一个组可以有多个实例)? -
在 B 中添加一个构造函数,该构造函数采用 A 列表并在该构造函数中实现您的规则
-
我对问题进行了改写和扩展,以包含有关规则的更具体细节,现在应该更加清晰和准确。
-
嗨,Kev,我已经回滚了你所做的编辑,因为你已经完全改变了这篇文章的上下文。请考虑尝试提出一个新问题,我和现场其他人将愿意提供帮助。
标签: java java-8 java-stream collectors