Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法引用Java 8流非静态方法流_Java_Java Stream - Fatal编程技术网

无法引用Java 8流非静态方法流

无法引用Java 8流非静态方法流,java,java-stream,Java,Java Stream,我在思想上有问题。 我有一个简单的测试: @Test public void shouldFlattenAListOfList() throws Exception { List<String> flatten = PTestImpl.flatten( asList("a", asList("b", asList("c", "d")), "e")); assertThat(flatten, hasSize(5)

我在思想上有问题。 我有一个简单的测试:

 @Test
    public void shouldFlattenAListOfList() throws Exception {
        List<String> flatten = PTestImpl.flatten(
                asList("a", asList("b", asList("c", "d")), "e"));
        assertThat(flatten, hasSize(5));
        assertThat(flatten, hasItems("a", "b", "c", "d", "e"));
    }

如何修复它?

如果您不想对接收列表中的元素类型做出任何假设,则必须更改
展平
方法主体及其返回类型:

public static List<?> flatten(List<?> list){
    return list.stream()
        .flatMap(e -> e instanceof List ? flatten((List) e).stream() : Stream.of(e))
        .collect(Collectors.toList());
}
公共静态列表展平(列表){
return list.stream()
.flatMap(e->e instanceof List?展平((List)e).stream():stream.of(e))
.collect(Collectors.toList());
}

如果您不想对接收列表中的元素类型做出任何假设,则必须更改
展平
方法主体及其返回类型:

public static List<?> flatten(List<?> list){
    return list.stream()
        .flatMap(e -> e instanceof List ? flatten((List) e).stream() : Stream.of(e))
        .collect(Collectors.toList());
}
公共静态列表展平(列表){
return list.stream()
.flatMap(e->e instanceof List?展平((List)e).stream():stream.of(e))
.collect(Collectors.toList());
}

您试图对列表的每个元素调用collection.stream()。但列表不包含集合的实例。它包含对象。您似乎还认为flatMap是递归的。不是。@Ravi-这不是一个例外,OP代码中的
静态
与此问题无关。@JBNizet ok那么我应该如何替换列表?这不是您应该替换的。您应该用其他方法替换flatte()方法的内容(即递归,并测试列表元素的类型)。您正在尝试对列表的每个元素调用collection.stream()。但列表不包含集合的实例。它包含对象。您似乎还认为flatMap是递归的。不是。@Ravi-这不是一个例外,OP代码中的
静态
与此问题无关。@JBNizet ok那么我应该如何替换列表?这不是您应该替换的。您应该用其他内容替换flatte()方法的内容(即递归,并测试列表元素的类型)。
public static List<?> flatten(List<?> list){
    return list.stream()
        .flatMap(e -> e instanceof List ? flatten((List) e).stream() : Stream.of(e))
        .collect(Collectors.toList());
}