gpt4 book ai didi

Java 8 多重映射

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:55 25 4
gpt4 key购买 nike

是否可以对集合执行多重映射?以下代码编译错误:

... in Stream cannot be applied to java.util.function.Function<capture<?>,capture<?>>

private static List<?> multipleMapping(final Collection<?> collection, final List<Function<?, ?>> functions) {
Stream<?> stream = collection.stream();
for (Function<?, ?> function : functions) {
stream = stream.map(function);
}
return stream.collect(Collectors.toList());
}

我想要通用解决方案。

最佳答案

问题出在您使用的是通用通配符 ?。 .你想要的是有一个参数化类型 T ,它将表示 Stream 元素的类型。假设该函数将返回与输入相同的类型,您可以:

private static <T> List<T> multipleMapping(final Collection<T> collection, final List<Function<T, T>> functions) {
Stream<T> stream = collection.stream();
for (Function<T, T> function : functions) {
stream = stream.map(function);
}
return stream.collect(Collectors.toList());
}

这编译得很好:给 map 的映射器正确接受 T并返回 T .但是,如果函数返回的类型与其输入的类型不同,那么您将无法保持类型安全,将不得不求助于使用 List<Function<Object, Object>>。 .


请注意,我们可以使用 UnaryOperator<T> 而不是 Function<T, T> .

此外,您可以避免 for使用 andThen 循环并将所有函数缩减为一个函数:

private static <T> List<T> multipleMapping(final Collection<T> collection, final List<Function<T, T>> functions) {
return collection.stream()
.map(functions.stream().reduce(Function.identity(), Function::andThen))
.collect(Collectors.toList());
}

关于Java 8 多重映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36095647/

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