使用collect返回List<particular type>而不是List<Object>

问题描述 投票:0回答:1

我想收集

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>
}
java java-8 java-stream
1个回答
0
投票

问题在于您在

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)); 
}
© www.soinside.com 2019 - 2024. All rights reserved.