Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.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
使用Java8将一种类型的列表转换为另一种类型的数组_Java_Java 8_Java Stream - Fatal编程技术网

使用Java8将一种类型的列表转换为另一种类型的数组

使用Java8将一种类型的列表转换为另一种类型的数组,java,java-8,java-stream,Java,Java 8,Java Stream,我需要将字符串列表转换为userdefinedType数组,对于数组,我需要将字符串转换为long 我用下面的方法实现了同样的效果 TeamsNumberIdentifier[] securityPolicyIdArray = securityPolicyIds.stream() .map(securityPolicy -> new TeamsNumberIdentifier(Long.valueOf(securityPolicy)))

我需要将字符串列表转换为userdefinedType数组,对于数组,我需要将字符串转换为long

我用下面的方法实现了同样的效果

TeamsNumberIdentifier[] securityPolicyIdArray = securityPolicyIds.stream()
                .map(securityPolicy -> new TeamsNumberIdentifier(Long.valueOf(securityPolicy)))
                .collect(Collectors.toCollection(ArrayList::new))
                .toArray(new TeamsNumberIdentifier[securityPolicyIds.size()]);

有没有更好的转换方法?

您不需要创建临时ArrayList。只需在流中使用toArray:

TeamsNumberIdentifier[] securityPolicyIdArray = securityPolicyIds.stream()
            .map(securityPolicy -> new TeamsNumberIdentifier(Long.valueOf(securityPolicy)))
            .toArray(TeamsNumberIdentifier[]::new);

但一般来说,我会首先避免使用数组,而是使用列表。

我会这样写:

securityPolicyIds.stream()
                 .map(Long::valueOf)
                 .map(TeamsNumberIdentifier::new)
                 .toArray(TeamsNumberIdentifier[]::new);

这是更有效的一个和更干净的,我将使用sameI也做同样的事情,但我的API需要数组而不是列表