无法引用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());
}