下面是如何对数据进行分组和聚合的示例。希望这有帮助。
代码
public static void main(String[] args) {
List toSort = getToSort();
Map> grouped = toSort.stream()
.collect(Collectors.groupingBy(o -> o.stackTrace));
List aggregated = grouped.entrySet()
.stream()
.map(entry -> {
CsvEntity csvEntity = entry.getValue().get(0);
String occurrences = String.valueOf(entry.getValue().size());
return new CsvEntity(occurrences, csvEntity.status, csvEntity.message, csvEntity.stackTrace);
})
.collect(Collectors.toList());
aggregated.forEach(csvEntity -> System.out.println(csvEntity.toString()));
}
private static List getToSort() {
return Arrays.asList(
new CsvEntity("1", "Fail", "Message 1", "Stack 1"),
new CsvEntity("1", "Pass", "Message 1", "Stack 1"),
new CsvEntity("1", "Fail", "Message 1", "Stack 1"),
new CsvEntity("1", "Fail", "Message 2", "Stack 2"),
new CsvEntity("1", "Pass", "Message 2", "Stack 2"),
new CsvEntity("1", "Pass", "Message 3", "Stack 3"),
new CsvEntity("1", "Pass", "Message 3", "Stack 3")
);
}
public static class CsvEntity {
String occurrences;
String status;
String message;
String stackTrace;
CsvEntity(String occurrences, String status, String message, String stackTrace) {
this.occurrences = occurrences;
this.status = status;
this.message = message;
this.stackTrace = stackTrace;
}
@Override
public String toString() {
return occurrences + ", " + status + ", " + message + ", " + stackTrace;
}
}
产量
3, Fail, Message 1, Stack 1
2, Fail, Message 2, Stack 2
2, Pass, Message 3, Stack 3