java - java中根据属性对对象列表进行分组

标签 java list collections pojo

我有 POJO List<TravelRequestDTO>我想分组并创建过滤的 List<TravelRequestDTO>如果leavingFrom,goingTo,onwarDate,returnDate相同将乘客添加到同一对象

示例:

Passanger,     onWard,      return,      leavingFrom,     goingTo

  A,            1-2-20,      3-2-20,        BLR,            PUNE

  B,            1-2-20 ,     3-2-20,        BLR,            PUNE

最终List<TravelRequestDTO>应包含:

Passanger,     onWard,      return,      leavingFrom,     goingTo

  A,B          1-2-20      3-2-20        BLR            PUNE
public class TravelRequestDTO {

    private List<Pax> passangers; 
    private String leavingFrom;
    private String goingTo;
    private String onwarDate;
    private String onwardTime;
    private String returnDate;
    private String returnTime;
    private SegmentTypeEnum segmentType;
    private TravelModeEnum travelMode;
    private String purposeOfVisit;
     }


    public class Pax{

    private String name;
    private String age;
    private String mobile;
    }

最佳答案

If you need older java version ,比你可以这样做:

Map<Object, List<TravelRequestDTO>> hashMap = new HashMap<Object, List<TravelRequestDTO>>();
for (TravelRequestDTO value: initList) {
    List<Object> key = Arrays.asList(value.getOnWard(),value.getReturn(),value.getLeavingFrom(),value.getGoingTo());
    if (!hashMap.containsKey(key)) {
        List<TravelRequestDTO> list = new ArrayList<TravelRequestDTO>();
        list.add(value);
        hashMap.put(key, list);
    } else {
        hashMap.get(key).add(value);
    }
}

检查this question寻求其他解决方案。

这只是你想要的一半。之后,您必须从该 map 中提取最终结果。或者您可以一步完成:

Map<Object, TravelRequestDTO> hashMap = new HashMap<Object, TravelRequestDTO>();
for (TravelRequestDTO value: initList) {
    List<Object> key = Arrays.asList(value.getOnWard(),value.getReturn(),value.getLeavingFrom(),value.getGoingTo());
    if (!hashMap.containsKey(key)) {
        TravelRequestDTO item = value; // pass first value or copy it to new
        hashMap.put(key, item);
    } else {
        hashMap.get(key).getPassangers().addAll(value.getPassangers());
    }
}
List<TravelRequestDTO> result = new ArrayList<>(hashMap.values());

关于java - java中根据属性对对象列表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60050748/

相关文章:

java - 通过隧道交互在我的 web View 上重新加载 Html 文件

java - 回收者 View 混合了其元素的内容

Java 在其他函数中设置和获取变量

java - 使用 JSON 文件解析信息中的 url 来显示 URL 中的图像

python parse 仅打印列表中的第一行

list - 序列和列表之间的区别

java - 我需要什么集合来存储对象及其数量?

java - 如何避免嵌套的 forEach 调用?

python - 如何让我的程序随机列出列表中的每个项目并且只列出一次

java - 让 Collections.binarySearch() 与 CompareToIgnoreCase 一起使用?