2016-05-05 3 views
0

人のリスト(idとfirstname)とマップ(idとlastnames)を新しい人のリストに組み合わせたJava 8にJavaコードを最適化するのに役立つ必要があります。 id、ファーストネーム、ラストネーム。リストを地図と組み合わせるためのJava 8の最適化

ありがとうございます!そのような

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

}

+2

ここではJava 8の機能の使用に大きな価値はありません。どうしてそう思うの?ところで、私はマップのエントリセットを反復するのではなく、 'personLastnames.get(Integer.toString(firstnames.getId());')を使って姓を調べるだけです。 – stholzm

答えて

0

コードマップは、人のキー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()); 
+0

ありがとう、それは私が探しているものです。 :-) – chrisishere

0

S番目?

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) 

私のPersonクラス:

@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; 
    } 
} 

これは単なる実施例です。マップに必要な値が含まれているかどうかは確かに確認してください。

+0

ありがとうございます、はい、それは非常に便利です。 – chrisishere

1

なぜ新しいPersonオブジェクトを作成しますか?

personFirstnames.stream() 
      .map(person -> { 
       person.setLastName(personLastnames.get(person.getId().toString())); 
       return person; 
      }) 
      .forEach(System.out::println); 
関連する問題