gpt4 book ai didi

java - 使用 List> 映射对象

转载 作者:行者123 更新时间:2023-12-04 13:12:02 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com