gpt4 book ai didi

java - 传递一些 lambda 作为方法的参数

转载 作者:行者123 更新时间:2023-11-30 05:25:36 25 4
gpt4 key购买 nike

我想将一些 lambda 方法作为参数传递给该方法。不是一个 lambda,而是几个 lambda。如何做到这一点?

flines = arg -> arg.startsWith("WAW");

String fname = System.getProperty("user.home") + "/LamComFile.txt";

InputConverter<String> fileConv = new InputConverter<>(fname);

List<String> lines = fileConv.convertBy(flines);

String text = fileConv.convertBy(flines, join);

List<Integer> ints = fileConv.convertBy(flines, join, collectInts);

Integer sumints = fileConv.convertBy(flines, join, collectInts, sum);
...

最佳答案

我认为你必须编写返回类型取决于Function-argument的方法:

class InputConverter<T> {
private final T value;

public InputConverter(T value) {
this.value = value;
}

public <R> R convertBy(Function<T, R> function){
return function.apply(value);
}
}

然后您可以使用标准方法 composeandThen 组合 Function 参数:

final String fname = "fname_value"

InputConverter<String> inputConverter = new InputConverter<>(fname);

Function<String, List<String>> valueToListFunction = Arrays::asList;
Function<List<String>, String> firstValueFunction = l -> l.get(0);

List<String> strings = inputConverter.convertBy(valueToListFunction);//[fname_value]
String firstValue = inputConverter.convertBy(
valueToListFunction
.andThen(firstValueFunction)
);

您还可以使用其他标准FunctionalInterfaces,例如UnaryOperator:

UnaryOperator<String> firstChangeFunction = arg -> arg.concat(" + first");
UnaryOperator<String> secondChangeFunction = arg -> arg.concat(" + second");

String firstValue = inputConverter.convertBy(
valueToListFunction
.andThen(firstValueFunction)
.andThen(secondChangeFunction)
.compose(firstChangeFunction)
); // sout: fname_value + first + second

或者自己写。

关于java - 传递一些 lambda 作为方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58690633/

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