我需要帮助将我的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;
}
}
这只是一个有效的例子。您应该明确地检查映射是否包含您需要的值。