实例化具有参数数组的对象列表

Dei*_*und 3 java java-8 java-stream

我想使用参数数组实例化一个对象列表,如下所示:

String[] winnerData = ("Team_1#Team_2#...#Team_N").split("#");
List<Team> winners = new ArrayList();
for (String w : winnerData){
    winners.add(new Team(w));
}
Run Code Online (Sandbox Code Playgroud)

我怎么能干净利落地做到这一点?优选地在单行中.

我不介意winners/winnerData是List还是Array.

Nic*_*tto 5

你可以使用Stream API这种需要.

String[] winnerData = ("Team_1#Team_2#...#Team_N").split("#");
// Create a Stream from the array of String
// For each String convert it as a Team using new Team(String)
// Convert the result as a List
List<Team> winners = Arrays.stream(winnerData)
    .map(Team::new)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


Tag*_*eev 5

您可能需要考虑使用Pattern.splitAsStream以下方法跳过中间数组创建:

// Declare the pattern somewhere in the appropriate class
static final Pattern DELIMITER = Pattern.compile("#");

String winnerData = "Team_1#Team_2#...#Team_N";
List<Team> winners = DELIMITER.splitAsStream(winnerData)
    .map(Team::new)
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

这样就不会创建中间数组,使得整个链完全懒惰,如果你有很多团队,可能会占用更少的内存(并且工作更快).