Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 使用Java8将复杂对象列表转换为映射_Java 8_Java Stream - Fatal编程技术网

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())
        ));