从数据库中我得到以下列表
Id FirstName LastName Certificates
----------------------------------
1 A B Cert1
1 A B Cert2
2 C D Cert3
我想显示像
这样的记录1 A B Cert1, Cert2
2 C D Cert3
在java 8或hibernate中是否有任何方法可以获得我想要的结果?
我知道使用循环和逻辑,但有没有像oracle中的 Listagg 函数那样的方法?
答案 0 :(得分:2)
您可以使用java 8或hibernate。这是针对java 8。
public static void main(String[] args) {
List<Item> items = Arrays.asList(
new Item("1", "A", "B", "Cert1"),
new Item("1", "A", "B", "Cert2"),
new Item("2", "C", "D", "Cert3")
);
Map<String, List<Item>> groupByKey = items.stream().collect(Collectors.groupingBy(Item::groupKey));
List<String> result = groupByKey.entrySet().stream()
.map(entry -> entry.getValue().stream().map(Item::d).collect(Collectors.joining(",")))
.collect(Collectors.toList());
result.forEach(System.out::println);
}
public static class Item {
String a;
String b;
String c;
String d;
public Item(String a, String b, String c, String d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
String d() {
return d;
}
String groupKey() {
return a + "-" + b + "-" + c;
}
}
Result :
Cert3
Cert1,Cert2