Java 8から導入されたラムダ式を使ってコレクションを操作する方法について解説します。ここでは、実用的なものに的を絞って解説しています。
目次
前提(説明時に使用しているDTO)
説明で使用しているDTO
を提示しておきます。ここではUserDto
クラスを使用しています。
import java.io.Serializable;
public class UserDto implements Serializable {
private String userId;
private String userName;
private int age;
// Setter, Getterは省略
public String toString() {
return "userId=" + userId + ",userName=" + userName + ",age=" + age;
}
}
ListをMapに変換する
ListをMapに変換する方法について解説します。
以下の例では、UserDtoクラスを要素に持つListをMapに変換しています。MapのキーはUserDtoのuserId、値はUserDtoにしています。
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// UserDtoを要素として持つListを用意する
List<UserDto> list = new ArrayList<>();
UserDto user1 = new UserDto();
user1.setUserId("001");
user1.setUserName("John Smith");
user1.setAge(20);
list.add(user1);
UserDto user2 = new UserDto();
user2.setUserId("002");
user2.setUserName("Maria Cambell");
user2.setAge(28);
list.add(user2);
// ListをMapに変換する(キーはUserDTOのUserIdを使用する)
Map<String, UserDto> map = list.stream().collect(Collectors.toMap(s -> s.getUserId(), s -> s));
// Listの出力結果を確認する
System.out.println(list);
// [userId=001,userName=John Smith,age=20,userId=002, userName=Maria Cambell,age=28]
// 変換後のMapの出力結果を確認する
System.out.println(map);
// {001=userId=001,userName=John Smith,age=20, 002=userId=002,userName=Maria Cambell,age=28}
}
}
Listから一部の項目を抽出する
Listから一部の項目を抽出する方法について解説します。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
// UserDtoを要素として持つListを用意する
List<UserDto> list = new ArrayList<>();
UserDto user1 = new UserDto();
user1.setUserId("001");
user1.setUserName("John Smith");
user1.setAge(20);
list.add(user1);
UserDto user2 = new UserDto();
user2.setUserId("002");
user2.setUserName("Maria Cambell");
user2.setAge(28);
list.add(user2);
// Listから項目の一部(ここではUserDtoのuserIdを抽出)し、リストにする
List<String> userIds = list.stream().map(s -> s.getUserId()).collect(Collectors.toList());
// 抽出前のListの内容を確認する
System.out.println(list);
// [userId=001,userName=John Smith,age=20, userId=002,userName=Maria Cambell,age=28]
// 抽出した項目を確認する
System.out.println(userIds);
// [001, 002]
}
}