我知道这个问题可能会引起误解,如果有人可以纠正它,我不确定在这种情况下如何提出问题。
我正在尝试使用Java 8中的流将X类转换为Y类。X类和Y类都包含相同的对象,但Y类是使X类与众不同我对流不熟悉。
X类
public class X {
private final String thumbnailUrl;
private final Integer duration;
private final String contentId;
private final Date reportDate;
private final Integer count;
public X(Report report, int count) {
this.thumbnailUrl = report.getContent().getThumbnailUrl();
this.duration = report.getContent().getDuration();
this.contentId = report.getContent().getContentId();
this.reportDate = report.getReportDate();
this.count = count;
}
public String getThumbnailUrl() {
return thumbnailUrl;
}
public Integer getDuration() {
return duration;
}
public String getContentId() {
return contentId;
}
public Date getReportDate() {
return reportDate;
}
public Integer getCount() {
return count;
}
}
Y类
public class Y {
private final String thumbnailUrl;
private final Integer duration;
private final String contentId;
private final Map<Date, Integer> contentList;
public Y(X x, Map<Date, Integer> contentList) {
this.thumbnailUrl = x.getThumbnailUrl();
this.duration = x.getDuration();
this.contentId = x.getContentId();
this.contentList = contentList;
}
public String getThumbnailUrl() {
return thumbnailUrl;
}
public Integer getDuration() {
return duration;
}
public String getContentId() {
return contentId;
}
public Map<Date, Integer> getContentList() {
return contentList;
}
}
这是我目前从X班得到的东西>>
[ { "thumbnailUrl": "a", "duration": 12, "contentId": "CNT10", "reportDate": "2020-01-20", "count": 3 }, { "thumbnailUrl": "a", "duration": 12, "contentId": "CNT10", "reportDate": "2020-01-21", "count": 5 }, { "thumbnailUrl": "a", "duration": 12, "contentId": "CNT10", "reportDate": "2020-01-22", "count": 3 }, { "thumbnailUrl": "a", "duration": 12, "contentId": "CNT10", "reportDate": "2020-01-23", "count": 4 } ]
我使用了上面的json
List<X> x; List<Y> y; x = StreamSupport.stream(reportRepository .reportWithRoll(a, b, c).spliterator(), false) .map(report -> new X(report, report.getStartCount())) .collect(Collectors.toList());
我希望将其转换为如下所示的Y类内容。如何使用Java流实现此目标?
[ { "list": [ { "2020-01-20": 3, "2020-01-21": 5, "2020-01-22": 3, "2020-01-23": 4 } ], "thumbnailUrl": "a", "duration": 12, "contentId": "CNT10" } ]
我尝试使用此方法获取上述json格式,但最终获得了重复的数据(单个contentId且多个contentId错误)>
y = x.stream().map( rep -> { Map<Date, Integer> contentList = x.stream().collect( Collectors.toMap(X::getReportDate, X::getCount) ); Y yy = new Y(rep, contentList); return yy; } ).distinct().collect(Collectors.toList());
我将每个“ contentId”的普通事物合并为一个“列表”。
我知道这个问题可能会引起误解,如果可能的话,可能会予以纠正,我不确定在这种情况下如何提出问题。我正在尝试使用java中的流将X类转换为Y类...
如果我理解这个问题,您只是将所有X
对象收集到一个Y
对象中?
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collector.html