为什么不能使用Guava的标识函数代替将列表转换为可迭代的函数?

时间:2015-06-30 18:44:01

标签: java guava

由于遗留原因,我必须使用Java 7和Guava重新实现一些Java 8代码。原始代码如下所示:

Function<List<String>, Iterable<String>> f = new Function<List<String>, Iterable<String>>() {
            public Iterable<String> apply(List<String> list) { return list; }
        }

FluentIterable.from(someMethodReturningSetofListofStrings()).transformAndConcat(f);

使用番石榴,我将参加FluentIterable课程,这是我的尝试:

f

我认为定义函数transformAndConcat(List<String>, Iterable<?>) cannot be applied to Function<Object, Object>是不必要的,因为它是身份函数,我可以使用Functions#identity()

但我的IDE(Intellij IDEA 14)抱怨List。我不明白为什么,因为Iterable显然是this.get(status)

2 个答案:

答案 0 :(得分:2)

这是类型推断失败,在这种情况下,您始终可以显式提供类型

transformAndConcat(Function.<List<String>>identity());

在java8中,改进了类型推断,并在java8中编译以下代码

transformAndConcat(Function.identity());

答案 1 :(得分:0)

使用Iterables.concat

Iterables.concat(someMethodReturningSetofListofStrings())