Java 8 使用流将列表转换为映射

Java 8 使用流将列表转换为映射,java-8,java-stream,Java 8,Java Stream,这个问题得到了部分回答。 我的地图将有按交易类型分组的交易ID。此链接提供按交易类型分组的交易。我知道我可以进一步操纵它以获得想要的结果,但我只是想知道它是否可能一次性实现。 这是我的密码 public static void main(String[] args) { Trade trade1 = new Trade(1, TradeStatus.NEW, "type1",1); Trade trade2 = new Trade(2, TradeStatus.FAILED, "type2",1

这个问题得到了部分回答。 我的地图将有按交易类型分组的交易ID。此链接提供按交易类型分组的交易。我知道我可以进一步操纵它以获得想要的结果,但我只是想知道它是否可能一次性实现。 这是我的密码

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
publicstaticvoidmain(字符串[]args){
Trade trade1=新交易(1,TradeStatus.new,“type1”,1);
Trade trade2=新交易(2,TradeStatus.FAILED,“type2”,1);
贸易3=新贸易(3,TradeStatus.new,“type1”,1);
贸易4=新贸易(4,TradeStatus.new,“type3”,1);
Trade trade5=新交易(5,TradeStatus.CHANGED,“type2”,1);
Trade trade6=新交易(6,TradeStatus.EXPIRED,“type1”,2);
列表=新的ArrayList();
增加(贸易1);
增加(贸易2);
增加(贸易3);
增加(贸易4);
增加(5);
增加(6);
映射结果=
list.stream().collect(Collectors.groupingBy(Trade::getTradeType));
System.out.println(结果);//打印按交易类型分组的交易
Map unvaluedtradesMap=newhashmap();
适用于(贸易:清单){
字符串tradeType=trade.getTradeType();
if(unvaluedtradesMap.containsKey(trade.getTradeType())){
List unValuedTrades=unvaluedtradesMap.get(贸易类型);
unValuedTrades.add(trade.getId());
unvaluedtradesMap.put(交易类型,unValuedTrades);
}否则{
unvaluedtradesMap.put(tradeType,Lists.newArrayList(trade.getId());
}
}
System.out.println(unvaluedtradesMap);//打印按交易类型分组的交易ID

}

您可以通过将
映射
收集器链接到
分组方式
来完成此操作:

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

谢谢。。。这太棒了!