- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 List<UnaryOperator<String>>
并且需要通过将字符串传递给运算符列表来映射/转换它。我有以下功能性 Java 11 代码:
UnaryOperator<String> addA = (startString) -> startString + "a";
UnaryOperator<String> addB = (startString) -> startString + "b";
UnaryOperator<String> addc = (startString) -> startString + "c";
List<UnaryOperator<String>> operators = List.of(addA, addB, addc);
String concatenatedString =
operators
.stream()
.reduce(
"", // identity
(value, op) -> op.apply(value), // accumulator
(value1, value2) -> value1.concat(value2) // combiner
);
System.out.println(concatenatedString); // prints "abc" as expected.
我担心的是字符串连接在 2 个地方表示。在每个 UnaryOperator
中排名第一组合器参数中的 s 和 second。让我想知道是否有更好的方法来做到这一点?
最佳答案
您可以利用 UnaryUperator<T> extends Function<T, T>
的优势并链接 Function::andThen
的多个调用得到一个沉着的UnaryOperator<String>
列表中的所有内容:
UnaryOperator<String> mergedUnaryOperators = operators.stream()
.reduce((l, r) -> (string) -> l.andThen(r).apply(string))
.orElseGet(UnaryOperator::identity);
String output = mergedUnaryOperators.apply(""); // results in "abc"
为了更清楚地了解它是如何工作的,这在 reduce
中被称为方法:
new BinaryOperator<UnaryOperator<String>>() {
@Override
public UnaryOperator<String> apply(UnaryOperator<String> l, UnaryOperator<String> r) {
return string -> l.andThen(r).apply(string);
}
}
关于java - 使用 List<UnaryOperator<...>> 映射对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64078391/
unaryOperators operator++ (const unaryOperators &one); 对于在类中声明的这个,我应该得到错误“参数太多”等,但我得到的错误是: 错误:后缀“una
在 C BNF 中,MultiplicativeExpression 和 UnaryOperator 定义如下: MultiplicativeExpression ::= CastExpression
我有一个 List>并且需要通过将字符串传递给运算符列表来映射/转换它。我有以下功能性 Java 11 代码: UnaryOperator addA = (startString) -> startS
我仍在学习函数式接口(interface)。我想知道为什么我能够将 UnaryOperator 链接到 Function 的末尾,但不能将 IntUnaryOperator 链接到末尾具有相同的功能。
目前,我有一个像这样的 UnaryOperator UnaryOperator defaultParser = obj -> obj; 我不知道我是否可以在这些操作中使用方法引用。示例: UnaryO
减少 Java 8 中的 UnaryOperator 列表直到它们代表一个我可以调用 apply 的 UnaryOperator 的首选方法是什么?例如我有以下 interface MyFilter
基于 std::transform template OutputIterator transform ( InputIterator first1, InputIterator last1,
我这里有这段代码: class MemcpyMatcher : public MatchFinder::MatchCallback { public: MemcpyMatcher(map
我正在尝试使用 JavaFX 8 的 TextFormatter 为整数创建一个数字 TextField。 使用 UnaryOperator 的解决方案: UnaryOperator integerF
我已经在 scala 中编写了这段代码: def push(x: T): Unit = ref.updateAndGet(new UnaryOperator[List[T]] { override
我是一名优秀的程序员,十分优秀!