Java 8 使用Java8将复杂对象列表转换为映射
我有一系列的科目Java 8 使用Java8将复杂对象列表转换为映射,java-8,java-stream,Java 8,Java Stream,我有一系列的科目 List<String> subjects = Arrays.asList(“physics”, “maths”); List subjects=Arrays.asList(“物理”、“数学”); 我想为每个主题创建一个虚拟的用户列表,并将它们添加到一个地图中,其中key作为主题,value作为列表 差不多 Map<String,List<User>> userMap = new HashMap<>(); for(String
List<String> subjects = Arrays.asList(“physics”, “maths”);
List subjects=Arrays.asList(“物理”、“数学”);
我想为每个主题创建一个虚拟的用户列表,并将它们添加到一个地图中,其中key作为主题,value作为列表
差不多
Map<String,List<User>> userMap = new HashMap<>();
for(String subject: subjects){
List<User> users = new ArrayList<User>();
for(int i=0;i<10;i++){
User user = new User(“first name”+i+subject,”last name”+i+subject);
users.add(user);
}
userMap.put(subject,users);
}
Map userMap=newhashmap();
for(字符串主题:主题){
列表用户=新建ArrayList();
对于(int i=0;i{
List userList=new ArrayList();
对于(int i=0;i
并将其用于:
subjects.stream()
.map(YourClass::createEntry)
.collect(Collectors.toMap(Entry::getKey, Entry::getValue))
请注意,在java 8中,循环是最干净的方法:
Map<String,List<User>> userMap = new HashMap<>();
subjects.forEach(s -> {
for (int i = 0; i < 10; i++)
userMap.computeIfAbsent(s, k -> new ArrayList<>())
.add(new User("first name" + i + subject, "last name" + i + subject));
});
Map userMap=newhashmap();
主题。forEach(s->{
对于(int i=0;i<10;i++)
userMap.computeIfAbsent(s,k->new ArrayList())
.添加(新用户(“名字”+i+主题,“姓氏”+i+主题));
});
让我们一步一步来完成这项工作。首先,创建10个用户的内部循环可以用流编写为:
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
List<User> userList = IntStream.range(0, 10)
.mapToObj(i -> new User("first name" + i + subject, "last name" + i + subject)
.collect(toList());
现在我们可以把它放在一起:
Map<String, List<User>> userMap = subjects.stream()
.collect(toMap(
subject -> subject,
subject -> IntStream.range(0, 10)
.mapToObj(i -> new User("first name" + i + subject, "last name" + i + subject))
.collect(toList())
));
Map userMap=subjects.stream()
.收集(
主题->主题,
主题->IntStream.range(0,10)
.mapToObj(i->新用户(“名字”+i+主题,“姓氏”+i+主题))
.collect(toList())
));
这非常简单!!:-)…或者只使用.collect(Collectors.toMap(Function.identity(),subjectName->{List users=..创建用户;返回用户;}))
而无需前面的映射步骤。
Map<String,List<User>> userMap = new HashMap<>();
subjects.forEach(s -> {
for (int i = 0; i < 10; i++)
userMap.computeIfAbsent(s, k -> new ArrayList<>())
.add(new User("first name" + i + subject, "last name" + i + subject));
});
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
List<User> userList = IntStream.range(0, 10)
.mapToObj(i -> new User("first name" + i + subject, "last name" + i + subject)
.collect(toList());
subjects.stream()
.collect(toMap(
subject -> subject, // key for the map is the subject
subject -> ... // whatever should be the value of the map
));
Map<String, List<User>> userMap = subjects.stream()
.collect(toMap(
subject -> subject,
subject -> IntStream.range(0, 10)
.mapToObj(i -> new User("first name" + i + subject, "last name" + i + subject))
.collect(toList())
));