我需要将regex列表应用于字符串,所以我想使用java8 map reduce:
List<SimpleEntry<String, String>> list = new ArrayList<>();
list.add(new SimpleEntry<>("\\s*\\bper\\s+.*$", ""));
list.add(new SimpleEntry<>("\\s*\\bda\\s+.*$", ""));
list.add(new SimpleEntry<>("\\s*\\bcon\\s+.*$", ""));
String s = "Tavolo da cucina";
String reduced = list.stream()
.reduce(s, (v, entry) -> v.replaceAll(entry.getKey(), entry.getValue()) , (c, d) -> c);
实际上,这段代码可能不是很漂亮,但它很有效。我知道这是无法并行的,对我来说是可以的。
现在我的问题是:Java8(或更高版本)是否有机会写出更优雅的东西?我的意思是避免添加无用的组合器功能。
另一种有趣的方法是:将所有条目减少到函数组合中,然后将该组合函数应用于原始输入:
String result = list.stream()
.map(entry ->
(Function<String, String>) text ->
text.replaceAll(entry.getKey(), entry.getValue()))
//following op also be written as .reduce(Function::compose) (see comment by Eugene)
.reduce((f1, f2) -> f1.andThen(f2)) //compose functions
.map(func -> func.apply(s)) //this basically runs all `replaceAll`
.get();
结果是您期望的字符串。虽然这种函数组合不是直观的,但它似乎符合这样的想法,即您的原始列表实际上是一种“转换逻辑”链。
受Oleksandr的评论和Holger的启发,我写了这篇文章
String reduced = list.stream()
.map(entry->
(Function<String, String>) v -> v.replaceAll(entry.getKey(), entry.getValue()))
.reduce(Function.identity(), Function::andThen)
.apply(s);
这也会将所有条目减少到函数组合中。
问题内容: 这个问题的标题不准确,但我不知道如何总结。如果可以的话,请随时重新编写! 这是两个表的摘录: 桌子 桌子 我需要合并这些表以获得此输出: 我找不到正确的查询。我需要下面类似的内容(我知道它不能完成工作),但是如何将所有代码和年份合并到一个表中,因为代码和年份在两个表中都没有重复… 以下是用于快速创建上述表的SQL脚本: 问题答案: 宇很可能是在寻找对
Git 有几个实现大部的分支及合并功能的实用命令。 git branch git branch 命令实际上是某种程度上的分支管理工具。 它可以列出你所有的分支、创建新分支、删除分支及重命名分支。 Git 分支 一节主要是为 branch 命令来设计的,它贯穿了整个章节。 首先,我们在 分支创建 一节中介绍了它,然后我们在 分支管理 一节中介绍了它的其它大部分特性(列举及删除)。 在 跟踪分支 一节
分支是我最喜欢的 Git 特性之一。如果你用过其他版本控制系统,把你所知的分支给忘记,倒可能更有帮助些 ——事实上,以我们使用分支的方式,把 Git 的分支看作 上下文 反而更合适。当你检出分支时,你可以在两三个不同的分支之间来回切换。 简而言之,你可以执行 git branch (branchname) 来创建分支,使用 git checkout (branchname) 命令切换到该分支,在该
我有两个可观测值,一个返回1个元素,另一个返回多个元素。我的目标是在不阻塞的情况下将它们合并在一起,以构建如下对象: 我试过压缩、合并和合并,但似乎都不是解决方案。
这就是我想做的: > 使用pdfbox制作2个不同的pdf文件 使用pdfmerger将这两个文件合并在一起 如果要将#1保存到服务器端本地硬盘并加载#2的文件,我知道如何执行此操作。但我想做的是使用“直接从内存”。我已经搜索了这个pdfboxes中的所有方法,但仍然找不到它。 这是我从本地文件获取的代码 谢谢你。
让我们来看一个简单的分支新建与分支合并的例子,实际工作中你可能会用到类似的工作流。 你将经历如下步骤: 开发某个网站。 为实现某个新的需求,创建一个分支。 在这个分支上开展工作。 正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。 你将按照如下方式来处理: 切换到你的线上分支(production branch)。 为这个紧急任务新建一个分支,并在其中修复它。 在测试通过之后,切换回线上