java8优化,将列表与映射相结合



我需要帮助将我的Java代码优化到Java 8,Java 8将人员列表(id和firstname)和映射(id和lastname)组合到具有id、firstname和lastname的新人员列表。

谢谢!

public class Test {
public static void main(String[] args) {
    List<Person> personFirstnames = new ArrayList<Person>();
    personFirstnames.add(new Person(1, "Mary"));
    personFirstnames.add(new Person(2, "Chris"));
    personFirstnames.add(new Person(3, "Emily"));
    personFirstnames.add(new Person(4, "Jack"));
    personFirstnames.add(new Person(5, "Henry"));
    personFirstnames.add(new Person(6, "Evie"));
    Map<String, String> personLastnames = new HashMap<String, String>();
    personLastnames.put("1", "Adams");
    personLastnames.put("2", "Hawn");
    personLastnames.put("3", "Browning");
    personLastnames.put("4", "Mills");
    personLastnames.put("5", "Neil");
    personLastnames.put("6", "Winston");
    List<Person> persons = new ArrayList<Person>();
    //how can i optimize the following part to Java 8?
    for (Person firstnames : personFirstnames) {
        for (Map.Entry<String, String> lastnames : personLastnames.entrySet()) {
            if (firstnames.getId() == new Integer(lastnames.getKey())) {
                Person person = new Person();
                person.setId(firstnames.getId());
                person.setFirstname(firstnames.getFirstname());
                person.setLastname(lastnames.getValue());
                persons.add(person);
            }
        }
    }
    persons.forEach(p -> System.out.println(p.getId() + " " + " " + p.getFirstname() + " " + p.getLastname()));
}

}

为什么要创建新的Person对象?

personFirstnames.stream()
            .map(person -> {
                person.setLastName(personLastnames.get(person.getId().toString()));
                return person;
            })
            .forEach(System.out::println);

代码检查您的地图是否包含人员的id作为密钥:

      List<Person> persons = personFirstnames.stream()
                                         .filter(person -> personLastnames.keySet().contains(String.valueOf(person.getId())))
                                         .map(person -> {
                                             Person pers = new Person();
                                             pers.setId(person.getId());
                                             pers.setFirstname(person.getFirstname());
                                             pers.setLastname(personLastnames.get(String.valueOf(person.getId())));
                                             return pers;
                                         })
                                         .collect(Collectors.toList());

是这样的吗?

    List<Person> personFirstnames = new ArrayList<Person>();
    personFirstnames.add(new Person(1, "Mary"));
    personFirstnames.add(new Person(2, "Chris"));
    personFirstnames.add(new Person(3, "Emily"));
    personFirstnames.add(new Person(4, "Jack"));
    personFirstnames.add(new Person(5, "Henry"));
    personFirstnames.add(new Person(6, "Evie"));
    Map<String, String> personLastnames = new HashMap<String, String>();
    personLastnames.put("1", "Adams");
    personLastnames.put("2", "Hawn");
    personLastnames.put("3", "Browning");
    personLastnames.put("4", "Mills");
    personLastnames.put("5", "Neil");
    personLastnames.put("6", "Winston");
    personFirstnames.stream()
            .map(person -> new Person(person.getId(), person.getFirstName(), personLastnames.get(person.getId().toString())))
            .forEach(System.out::println);

我得到:

Person(id=1, firstName=Mary, lastName=Adams)
Person(id=2, firstName=Chris, lastName=Hawn)
Person(id=3, firstName=Emily, lastName=Brownin
Person(id=4, firstName=Jack, lastName=Mills)
Person(id=5, firstName=Henry, lastName=Neil)
Person(id=6, firstName=Evie, lastName=Winston)

我的个人类:

@AllArgsConstructor
@Getter
@ToString
public static class Person {
    private final Integer id;
    private final String firstName;
    private final String lastName;
    public Person(final Integer id, final String firstName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = null;
    }
}

这只是一个有效的例子。您应该明确地检查映射是否包含您需要的值。

最新更新