我有包含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,但我无法将标识符值分隔为/
答案 0 :(得分:4)
这会将基于bankId
和identifierValue
累积的列表分组到由/
分隔符分隔的单个字符串中。
Map<String, String> result =
items.stream().collect(
Collectors.groupingBy(BankIdentifier::getBankId,
Collectors.mapping(BankIdentifier::getIdentifierValue, Collectors.joining("/")))
);
确保您拥有bankId
和identifierValue
的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
方法来连接标识符值。