将list <Object>转换为java 8流中的<Id>数组

use*_*426 8 java-8 java-stream

所以我有User类

User{
    id
    name
}
Run Code Online (Sandbox Code Playgroud)

我需要转换List<User>为使用流的数组,所以我正在做的一种方法是转换为列表然后转换为数组

coll.stream().map(am -> am.getId())
             .collect(Collectors.<Integer>toList())
             .toArray(new Integer[0])
Run Code Online (Sandbox Code Playgroud)

但我认为应该有另一种方法直接转换为数组而不是添加列表然后转换为数组.

Bye*_*Bye 11

你可以<A> A[] toArray(IntFunction<A[]> generator)在Stream中使用:

Integer[] ids = coll.stream()
    .map(am -> am.getId())
    .toArray(Integer[]::new)
Run Code Online (Sandbox Code Playgroud)

这将从流而不是列表创建数组.

  • `User :: getId`使它比`am - > am.getId()`(恕我直言)更具描述性 (4认同)

Ous*_* D. 5

除非有确凿的理由要收集到Integer[]您中,否则您可能正在寻找:

int[] ids = coll.stream()
                .mapToInt(User::getId)
                .toArray();
Run Code Online (Sandbox Code Playgroud)