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.
你可以使用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)
您可能需要考虑使用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)
这样就不会创建中间数组,使得整个链完全懒惰,如果你有很多团队,可能会占用更少的内存(并且工作更快).