分组时是否可以通过收集收集字符串?这就是它在 Java 8 中的工作方式:
Map<String, String> discountOptions = p.getDiscountOptions().Stream()
.collect(groupingBy(
this::getDiscountName,
Collectors.mapping(this::getValue, Collectors.joining(","))));
我很好奇,在 Google Guava 中有简洁的方法吗?这就是我尝试在 Guava 中复制它的方式:
Map<String, Collection<String>> stringCollectionMap = Multimaps.transformValues(
Multimaps.index(p.getDiscountOptions(),
new Function<DiscountOption, String>() {
@Override
public String apply(DiscountOption d) {
return getDiscountName(d);
}
}),
new Function<DiscountOption, String>() {
@Override
public String apply(DiscountOption d) {
return getValue(d);
}
}).asMap();
Map<String, String> discountOptions = Maps.transformValues(
stringCollectionMap,
new Function<Collection<String>, String>() {
@Override
public String apply(Collection<String> strings) {
return Joiner.on(",").join(strings);
}
});