Peek中的Java 8条件逻辑?

问题描述 投票:1回答:1

我目前有一些看起来像这样的Java 8代码-可以肯定,我可以将其组合成一个调用,但是不确定如何在Looped映射中将条件调用放在适当的位置。可以用peek()做到这一点吗?还是其他Java 8调用?

当前代码

//turn above groups into a map, grouped by Resolution
Map<Long,List<LeadChannel>> mappedUp = groups
                .stream()
                .collect( Collectors.groupingBy( channel->channel.getResolution().getId() ) );

下一位根据键的ID手动转换为字符串映射。

Map<String, List<LeadChannel>> finalMap = new HashMap<String, List<LeadChannel>>();

for ( Map.Entry<Long,List<LeadChannel>> entry : mappedUp.entrySet()) {
    if(  !entry.getKey().equals( RESOLVED_STATUS ) ) {
        finalMap.put( "unresolved", entry.getValue() );
    } else {
        finalMap.put( "resolved", entry.getValue() );
    }
}

我正在尝试执行以下操作:

 Map<String,List<LeadChannel>> mappedUp = groups
                        .stream()
                        .collect( Collectors.groupingBy( channel->channel.getResolution().getId() ) )
.entrySet()
.stream()
.peek( if statement etc.. )
java lambda java-8 java-stream collectors
1个回答
0
投票

您似乎正在寻找的是有条件的groupingBy,如下:

Map<String, List<LeadChannel>> finalMap = groups
        .stream()
        .collect(Collectors.groupingBy(channel ->
                channel.getResolution().getId().equals(RESOLVED_STATUS) ?
                        "unresolved" : "resolved"));

或在多个管道中,以了解如何对数据进行分区,然后根据问题中共享的条件对其进行进一步映射:

Map<Boolean, List<LeadChannel>> mappedUp = groups
        .stream()
        .collect(Collectors.partitioningBy(channel -> 
                channel.getResolution().getId().equals(RESOLVED_STATUS)));

Map<String, List<LeadChannel>> finalMap = mappedUp.entrySet().stream()
        // in a similar manner you can map your current map's entries as well
        .map(e -> new AbstractMap.SimpleEntry<>(e.getKey() ? "resolved" : "unresolved", e.getValue())) 
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

或如Holger所建议,最好使用lambda直接收集为

Map<String, List<LeadChannel>> finalMap = mappedUp.entrySet().stream()
        .collect(Collectors.toMap(e -> e.getKey()? "resolved": "unresolved", Map.Entry::getValue)) 
© www.soinside.com 2019 - 2024. All rights reserved.