2016-12-06 2 views
2

この質問は部分的にhereと回答しています。 私のマップには取引タイプ別に分類された取引IDがあります。このリンクをクリックすると、tradeTypeでグループ化された取引が表示されます。私はそれをさらに操作して望みの結果を得ることができると知っていますが、それが可能かどうか疑問に思うだけです。 ここに私のコードです。ストリームを使用したマップへのリストの変換

public static void main(String[] args) { 
Trade trade1 = new Trade(1, TradeStatus.NEW, "type1",1); 
Trade trade2 = new Trade(2, TradeStatus.FAILED, "type2",1); 
Trade trade3 = new Trade(3, TradeStatus.NEW, "type1",1); 
Trade trade4 = new Trade(4, TradeStatus.NEW, "type3",1); 
Trade trade5 = new Trade(5, TradeStatus.CHANGED, "type2",1); 
Trade trade6 = new Trade(6, TradeStatus.EXPIRED, "type1",2); 

List<Trade> list = new ArrayList<>(); 
list.add(trade1); 
list.add(trade2); 
list.add(trade3); 
list.add(trade4); 
list.add(trade5); 
list.add(trade6); 


Map<String, List<Trade>> result = 
     list.stream().collect(Collectors.groupingBy(Trade::getTradeType)); 

System.out.println(result);//prints Trades grouped by trade type 


Map<String, List<String>> unvaluedtradesMap = new HashMap<>(); 
for (Trade trade : list) { 
    String tradeType = trade.getTradeType(); 
    if(unvaluedtradesMap.containsKey(trade.getTradeType())){ 
    List<String> unValuedTrades = unvaluedtradesMap.get(tradeType); 
     unValuedTrades.add(trade.getId()); 
     unvaluedtradesMap.put(tradeType, unValuedTrades); 
    }else{ 
     unvaluedtradesMap.put(tradeType, Lists.newArrayList(trade.getId())); 
    } 
} 
System.out.println(unvaluedtradesMap);//prints TradeIDS grouped by trade type 

}

答えて

2

あなたはgroupingBymappingコレクタを連鎖することによってこれを行うことができます。

Map<String, List<String>> unvaluedtradesMap 
     = list.stream().collect(Collectors.groupingBy(Trade::getTradeType, 
                 Collectors.mapping(Trade::getId, 
                      Collectors.toList()))); 
+0

これは素晴らしいです...ありがとうございます! – Surinder

関連する問題