有没有办法过滤像枢轴一样的列表?

时间:2017-01-31 06:21:35

标签: hibernate java-8

从数据库中我得到以下列表

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 函数那样的方法?

1 个答案:

答案 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