我想收集
List<TestClone>
,但看起来 .collect() 仅返回 List<Object>
。有什么办法可以得到List<TestClone>
吗?
我知道 .toArray() 在那里,但想要一个 ArrayList。
public static List<TestClone> getTypes(List<TestClone> args)
{
return args.stream().map(e -> {
if (e.schema == null)
{
return getAllExportArgs(e);
}
else
{
return e;
}
}).collect(Collectors.toCollection(ArrayList<TestClone>::new)); //TODO: ?
}
public static List<TestClone> getAllExportArgs(TestClone args)
{
//returns List<TestClone>
}
问题在于您在
map
中调用的 lambda - if
分支返回 List<TestClone>
,而 else
分支返回 TestClone
。这两种类型之间的交集可能是 Object
。
假设这不是故意的,您可以展平
if
分支中的列表:
public static List<TestClone> getTypes(List<TestClone> args)
{
return args.stream().flatMap(e -> {
if (e.schema == null)
{
return getAllExportArgs(e).stream();
}
else
{
return Stream.of(e);
}
}).collect(Collectors.toCollection(ArrayList<TestClone>::new));
}