Java 8 Java 8在值列表上应用函数列表

Java 8 Java 8在值列表上应用函数列表,java-8,functional-programming,java-stream,Java 8,Functional Programming,Java Stream,任务:我们有映射器列表,必须应用于参数列表。 我们怎么办 我的变体不是很好: public static final Function<List<IntUnaryOperator>, UnaryOperator<List<Integer>>> multifunctionalMapper = lst -> { UnaryOperator<List<Integer>> uOp = new Unary

任务:我们有映射器列表,必须应用于参数列表。 我们怎么办

我的变体不是很好:

public static final Function<List<IntUnaryOperator>, UnaryOperator<List<Integer>>> multifunctionalMapper =
    lst -> {
        UnaryOperator<List<Integer>> uOp = new UnaryOperator<List<Integer>>() {
            @Override
            public List<Integer> apply(List<Integer> integers) {
                final int[] curFunct = new int[1];
                List<Integer> newLst = integers;
                for (int i = 0; i < lst.size(); i++) {
                    curFunct[0] = i;
                    newLst = newLst.stream().map(curInt -> lst.get(curFunct[0]).applyAsInt(curInt)).collect(Collectors.toList());
                }
                return newLst;
            }
        };
        return uOp;
    };
将打印:

4
6
8

如何减少多功能地图的代码?

下一个解决方案是

public static final Function<List<IntUnaryOperator>, UnaryOperator<List<Integer>>> multifunctionalMapper =lstFunc->
         lstVals -> lstVals.stream()
        .map(curValue -> lstFunc.stream().reduce(IntUnaryOperator::andThen).orElse(x -> x).applyAsInt(curValue))
        .collect(Collectors.toList());
public静态最终函数multifunctionalMapper=lstFunc->
lstVals->lstVals.stream()
.map(curValue->lstFunc.stream().reduce(IntUnaryOperator::andThen).orElse(x->x).applyAsInt(curValue))
.collect(Collectors.toList());

下一个解决方案是

public static final Function<List<IntUnaryOperator>, UnaryOperator<List<Integer>>> multifunctionalMapper =lstFunc->
         lstVals -> lstVals.stream()
        .map(curValue -> lstFunc.stream().reduce(IntUnaryOperator::andThen).orElse(x -> x).applyAsInt(curValue))
        .collect(Collectors.toList());
public静态最终函数multifunctionalMapper=lstFunc->
lstVals->lstVals.stream()
.map(curValue->lstFunc.stream().reduce(IntUnaryOperator::andThen).orElse(x->x).applyAsInt(curValue))
.collect(Collectors.toList());

这就是你想要做的吗

List<IntUnaryOperator> ops = Arrays.asList(a -> a++, a -> a*2);
IntUnaryOperator reduce = ops.stream().reduce(a -> a, IntUnaryOperator::andThen);

IntStream.of(1, 2, 3).map(reduce).forEach(System.out::println);
List ops=Arrays.asList(a->a++,a->a*2);
IntUnaryOperator reduce=ops.stream().reduce(a->a,IntUnaryOperator::and then);
IntStream.of(1,2,3).map(reduce).forEach(System.out::println);

这就是你想要做的吗

List<IntUnaryOperator> ops = Arrays.asList(a -> a++, a -> a*2);
IntUnaryOperator reduce = ops.stream().reduce(a -> a, IntUnaryOperator::andThen);

IntStream.of(1, 2, 3).map(reduce).forEach(System.out::println);
List ops=Arrays.asList(a->a++,a->a*2);
IntUnaryOperator reduce=ops.stream().reduce(a->a,IntUnaryOperator::and then);
IntStream.of(1,2,3).map(reduce).forEach(System.out::println);

但每次,您都需要一个函数,您需要生成、定制操作和定制减少。我的解决方案一次减少,然后每次实施CustomOps。请参阅“下一个解决方案是”-即OnceReduce。但每次,您都需要一个函数,您需要生成、CustomOps和CustomReduce。我的解决方案一次减少,然后每次实施CustomOps。请参阅“下一个解决方案是”-这是一次简化。