- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否可以在分组时通过集合收集字符串?这就是它在 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);
}
});
最佳答案
你不会得到比 Java 8 流 API 更简洁的东西,因为它存在的原因是改进这些类型的操作。
Java 8 之前的函数式编程可以使用 Guava 的函数式实用程序进行临时装配,但是 as they warn :
As of Java 7, functional programming in Java can only be approximated through awkward and verbose use of anonymous classes.... Excessive use of Guava's functional programming idioms can lead to verbose, confusing, unreadable, and inefficient code.... Imperative code should be your default, your first choice as of Java 7.
这是您的代码的命令式翻译:
private static final Joiner COMMA_JOINER = Joiner.on(",");
ListMultimap<String, String> groupedByDiscountName = ArrayListMultimap.create();
for (DiscountOption option : p.getDiscountOptions()) {
groupedByDiscountName.put(getDiscountName(option), getValue(option));
}
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
for (Entry<String, Collection<String>> e : groupedByDiscountName.asMap().entrySet()) {
builder.put(e.getKey(), COMMA_JOINER.join(e.getValues());
}
Map<String, String> discountOptions = builder.build();
它更短且更易于阅读。鉴于您当前的 API,这大概是您使用 Java 7 所能做的最好的事情。
也就是说,您可能会考虑重新检查您的 API - 特别是您使用静态方法(getDiscountName()
、getValue()
)来提取数据很奇怪来自您的 DiscountOption
类的数据 - 这些似乎是实例方法的明确候选者。同样,您可能会考虑创建一个 Discounts
类,其中包含一个或多个 DiscountOption
实例并提供一个返回逗号分隔字符串的 toString()
。然后您只需要构造您的 Discounts
对象就可以了。
关于java - 是否可以使用 Java Guava 将连接器(收集器、累加器)应用于函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37588762/
我们被要求从 Tomcat 1.6 迁移到 TomEE。在我们的应用程序中,我们使用 tomcat 作为嵌入式服务器。当我们尝试根据以下教程“http://www.copperykeenclaws.c
我需要一些有关配置文件的帮助。我已经在我的项目中包含了MySql.Data.dll,但是我如何告诉配置文件这个dll包含MySQL连接器? NHibernate.Connection.Dr
我花了几个小时盯着这段代码。请新鲜的眼睛! 这是查询的简化版本: You have an error in your SQL syntax; check the manual that corresp
我正在开发一个应用程序,它可以在不使用任何网络服务的情况下将数据插入数据库。我用 MySQL Workbench 在我的笔记本上创建了一个数据库。我可以使用模拟器将数据插入数据库,但我无法使用手机将数
我刚刚发现了 Zimbra,并且有一个用 Java 编写的连接器。我一直在网上寻找其他人的一些文档或经验,但找不到任何东西。是否有任何关于 API 的良好文档,以便我可以开始并检查可以用它做什么? 谢
我正在使用 C++ mysql 连接器在我的 mysql 数据库中执行操作。 我的 C++ 程序是一个实时应用程序(rest api),它始终在云端运行,始终等待用户请求。 当我启动第一种类型的程序时
我有一个 C 进程正在快速写入 mysql 数据库~每秒 10 次。此过程使用 MySql C 连接器。 运行约2分钟后,进程挂起,系统监视器显示 "futex_wait_queue_me" ,还有
有谁知道使用 TraceListener 为 MySQL 连接器/网络启用跟踪的方法我希望它记录实际针对数据库运行的 SQL 查询,即查看参数值被替换的 SQL。 最佳答案 从 mysql 5.1.2
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
作为 EF 菜鸟,我正在尝试将 Entity Framework 6 Code First 与我安装在我的开发计算机上的 MySql Server 5.6 结合使用。 我做了一个非常小的测试控制台项目
我需要将 Google Spreadsheet 与 JasperReports Server 一起使用,为此我需要一个用于 Google Spreadsheet 的 JDBC 连接器。 我找到了这个
我已经安装了 Tycho m2e 连接器,如下所述:http://codeandme.blogspot.ru/2012/12/tycho-build-1-building-plug-ins.html
我被要求使用 SAP .NET 连接器。我目前使用 .NET 4.0 和 VS2010。有什么我需要降级的吗? 另外,有没有人知道有关如何使用它的任何当前在线教程?我所拥有的只是来自 SAP 的信息,
我想知道什么是 m2e 连接器。除了这个页面,我在互联网上没有找到太多描述它们的内容: http://objectledge.org/confluence/display/TOOLS/M2E+Conn
是否可以通过 VGA 连接器镜像屏幕?找不到任何关于此的内容。 最佳答案 我一直在寻找和你一样的东西。上周末我写了一个小的 UIApplication 类别来添加镜像支持。我在 Google Code
我正在开发从 SQL Server Db 提取 CDC 数据的逻辑应用程序。我正在使用“获取行”操作,但当我尝试使用过滤查询参数时,问题就出现了。 代码 eq '793'(有效) __$operati
用例: 应用程序使用spark处理数据5分钟,要处理的数据可能是数据存储中数十万条记录的数据。 数据存储的选择是Elastic Search。 问题: 我们在Elasticsearch中是否有用于 S
我已经安装了 hadoop 3 版本的 GCS 连接器,并将以下配置添加到 core-site.xml,如 Install.md 中所述.目的是将数据从本地集群中的 hdfs 迁移到云存储。 核心站点
如何删除 debezium 连接器。我正在关注本教程 https://debezium.io/documentation/reference/tutorial.html我看到了注册连接器的方法,但不知
如何删除 debezium 连接器。我正在关注本教程 https://debezium.io/documentation/reference/tutorial.html我看到了注册连接器的方法,但不知
我是一名优秀的程序员,十分优秀!