Java 8 Stream使用分隔符分组并连接字符串

时间:2017-11-01 23:02:57

标签: java java-8

我有包含bankId,IdentifierId和IdentifierValue的对象列表。对于每个银行,我有多个identifierValue。我的要求是通过基于bankId对List进行分组来创建映射,并将identifierValue连接成由/.分隔的单个字符串。

例如:

Bank of America, identifer-1,  123
Bank of America, identifer-2,  234
wells Forgo,     identifier-1, 123

我希望结果是下面的地图

bank of America -> 123/234
wellsForgo -> 123

类别:

public class BankIdentifier {
    private String bankId;
    private String identifierId;
    private String identifierValue;
}

我正在使用Java 8 Streams groupby,但我无法将标识符值分隔为/

2 个答案:

答案 0 :(得分:4)

这会将基于bankIdidentifierValue累积的列表分组到由/分隔符分隔的单个字符串中。

Map<String, String> result =
                items.stream().collect(
                        Collectors.groupingBy(BankIdentifier::getBankId,
                                Collectors.mapping(BankIdentifier::getIdentifierValue, Collectors.joining("/")))
                        );

确保您拥有bankIdidentifierValue的getter,以便使用方法参考语法。

答案 1 :(得分:2)

您可以使用流,然后像Aominè's answer一样收集,分组,映射和加入,或者您可以在没有流的情况下执行此操作:

Map<String, String> result = new HashMap<>();
bankIdentifiers.forEach(b -> 
    result.merge(b.bankId, b.identifierValue, (o, n) -> o + "/" + n));

这使用Map.merge方法来连接标识符值。