【发布时间】:2016-06-02 10:06:38
【问题描述】:
是否可以在分组时收集字符串而不是收集?这就是它在 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);
}
});
【问题讨论】:
-
当您说“在 Google Guava 中执行”时,您的意思是“在没有 Java 8 语言特性的情况下执行”吗?或者你为什么不对这些函数式接口使用 lambda 表达式/方法?
-
是的,没有 Java 8,我的目标是以更命令式的方式完成。
标签: java collections guava java-stream joiner