我有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<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());

10-06 11:24