2017-01-31 60 views
0

從我得到的文章有沒有一種方法來過濾像透視一樣的列表?

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任何方式或休眠狀態,所以我可以得到我想要的結果?

我知道使用循環和邏輯,但有沒有像它的任何方法Listagg函數在oracle?

+0

你爲什麼稱這種操作「過濾器」? – Holger

回答

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 
+2

無論如何,您可以首先收集到一個Map 中,而不是收集到一個'List '中,而您將要加入到'String'中:Map groupByKey = items.stream()。collect(Collectors.groupingBy(Item :: groupKey),Collectors.joining(「,」));'然後,當你只想處理一個地圖的值時,你可以使用'values( )',而不是使用'entrySet()'併爲每個條目調用'entry.getValue()'。如果你只是在打印,你可以直接在地圖上執行:'groupByKey.values()。forEach(System.out :: println);' – Holger

+0

有沒有什麼方法可以不使用Item類?我將從框架 –

+0

獲得列表我用pojo來幫助我。你有什麼地圖? – utkusonmez

相關問題