Geo*_*rge 9 java regex variables lambda java-8
我不能用Java做到这一点:
Optional<String> optStr = Optional.of("foo");
String result;
optStr.ifPresent(s -> result = s);
Run Code Online (Sandbox Code Playgroud)
该文档说lambda中使用的变量必须是有效的.那么如何很好地从lambda中提取和存储一些东西呢?
实际上真正的用例更复杂.
我想用一个接一个地将几个正则表达式应用于一个字符串matcher.replaceAll.我在forEach lambda中这样做,并想在某处存储中间结果.
答案很简单:你不能(直接)这样做.
一个非常丑陋的黑客是改变外部对象而不是分配给变量:
Optional<String> optStr = Optional.of("foo");
StringBuilder sb = new StringBuilder();
optStr.ifPresent(s -> sb.append(s));
String result = sb.toString();
Run Code Online (Sandbox Code Playgroud)
但我想强调一点,这可能不是你真正想要做的.
optStr.orElse或optStr.orElseGet代替.optStr.map由于你没有提供你的整个用例,这些只是猜测,但关键是我真的不推荐上面的代码片段:它违背了函数式编程的概念(通过改变一个对象).
| 归档时间: |
|
| 查看次数: |
11865 次 |
| 最近记录: |