首页 > 解决方案 > 如何通过 Java 8 中的一些常见属性目录从列表中对对象进行分组

问题描述

我一直在努力解决我的数据列表之一的问题,因为生成它后的要求之一是通过一些常见参数(超过 1 个)对其中的一些进行分组

最后我应该得到一张地图,其中的值是一个常见对象的列表。例如。

List<Cause> listToGroup = new ArrayList<>();

listToGroup.add(Similar);
listToGroup.add(Common);
listToGroup.add(Similar);
listToGroup.add(Similar);
listToGroup.add(Common);

以一种奇怪的方式来表示一个组(Similar)和另一个组(Common),它们应该分成两个不同的列表(该列表是由对其他方法的请求生成的,在这种情况下,我只是手动添加以显示可以是列表中包含的数据)。我的主要问题是对它们进行分组的标准,因为它基于一组共享的参数,但不是全部(如果所需的参数相等,则应属于同一个列表)在下面显示的类中,可以看到这种行为,因为有一些参数没有被考虑。

public class Cause extends GeneralDomain {
     //parameters which must be equals between objects
     private Long id;
     private Date creationDate;
     private Part origin;
     private Part destination;

     //parameters which are not required to be equal
     private BigDecimal value
     private Stage stageEvent

     //omitted getters and setters
}

我一直在看到 Java 8 中提供的比较器方法和 groupingBy 方法,但目前我只知道如何执行该任务,只考虑一个参数(例如按 id 分组)而且我不知道如何分组他们使用多个参数。

//this should be the code if the requirement would be just one parameter to groupby, but in my case are more than one.
 Map<Long, List<Cause>> result = request.getList(criteria)
.stream()
.map(p -> parsin.createDto(p))
.collect(groupingBy(Cause ::getId));

我会很高兴有任何建议。如果我的解释不清楚,我很抱歉。这变得如此复杂以至于我都难以解释

标签: java-8java-streamcollectors

解决方案


推荐阅读