【问题标题】:Reduce List Objects field in Java减少Java中的列表对象字段
【发布时间】:2020-10-19 20:24:17
【问题描述】:

我有模特,退货和清单如下:

public class Occurrence {
       private Integer id;
       private String description;
       private String status;
      // gets/sets
}

List<Occurrence> list = this.getOccurrences();  

我的函数返回:

[ {"id": 1, "description": "One", "status": "Initial"},{"id": 1, "description": "One", "status": "Doing"}, {"id": 1, "description": "One", "status": "Almost"}, {"id": 1, "description": "One", "status": "Done!!"} ]

我怎样才能将值列表减少到这个?:

["id": 1, "description": "One", "status": ["Initial", "Doing", "Almost", "Done!!"] ]

【问题讨论】:

    标签: java arrays object reduce


    【解决方案1】:

    您需要做的是创建另一个对象,该对象代表一个 Occurance 但具有多个状态。问题是您试图将多个状态组合成一个状态,但一个事件只支持一个状态。

        public static final class MultiStatusOccurrence {
    
            private final int id;
    
            private final List<String> statuses;
    
            public MultiStatusOccurrence(int id, List<String> statuses) {
                this.id = id;
                this.statuses = statuses;
            }
    
            public int getId() {
                return id;
            }
    
            public List<String> getStatuses() {
                return statuses;
            }
        }
    

    然后,如果它们具有相同的 ID(假设它是唯一的),则您需要将它们映射在一起并将状态分组。这假设描述可以被删除,因为它不是唯一的并且始终相同。

            List<Occurrence> occurrences = new ArrayList<>(Arrays.asList(
                    new Occurrence(1, "Hello World!", "Done!"),
                    new Occurrence(1, "Hello World!", "Done2!")));
    
            List<MultiStatusOccurrence> multiStatusOccurrences = occurrences.stream()
                    .collect(Collectors.groupingBy(Occurrence::getId))
                    .entrySet()
                    .stream()
                    .map(entry -> new MultiStatusOccurrence(entry.getKey(), 
                            entry.getValue().stream()
                                    .map(Occurrence::getStatus)
                                    .collect(Collectors.toList())))
                    .collect(Collectors.toList());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-21
      • 2016-10-12
      • 2017-03-06
      • 2017-08-15
      • 1970-01-01
      • 2019-12-11
      • 2014-05-16
      相关资源
      最近更新 更多