2016-05-08 12 views
4

次のように私は私のSQL Server 2012のデータベース内のテーブルを持っている:ラムダ式を使ってResultSetからHashMapにデータを入れる方法は?

Student: 
ID, CardNo, Name, ZipCode, city, ... 

私はCardNoと私はHashMapにこのテーブルから選択された行を置くしたいJDK 8を、使用してJavaデスクトップアプリケーションを書いていますキーとしてNameを値として使用します。

これをラムダ式で表現すると、HashMapを入力する効率的な方法は何ですか?

注:CardNoはユニークです。これはどのように

答えて

2

List<Student> students = xxxDao.findFromDB(); 
Map<String, String> map = students.stream().collect(
            Collectors.groupingBy(Student::getCardNo, 
               Collectors.collectingAndThen(
                 Collectors.mapping(Student::getName, 
                    Collectors.toList()), nameList->nameList.get(0)))); 

----------------------------------- --------------------分割線---------------------------- --------------------------------------

私は上記の方法ではなくむしろ@FedericoPeraltaSchaffnerのおかげで、私たちが望むものを表現する他のより簡単な方法があります。 CardNoがユニークであるので、単にラムダを使用する理由Collectors.toMap

List<Student> students = xxxDao.findFromDB(); 
Map<String, String> map = students.stream().collect(Collectors.toMap(Student::getCardNo, Student::getName)); 
+0

'nameList'とは何ですか?データを取得する関数を呼び出す代わりに 'ResulSet'を直接使う方法はありますか? –

+2

'cardNo'はユニークなので、' Collectors.toMap() 'を使う方がはるかに良いです。 –

+2

@FedericoPeraltaSchaffnerああ、いい考えです。ありがとう、私は今それを追加しています。 – Tony

2

を使うのか?それを簡単にしておきましょう:

ストリーム/ラムダを使用することは、ここでは最適ではありません。

List<Student> students = xxxDao.retrieveStudents(); 

Map<Integer, String> map = students.stream() 
      .collect(Collectors.toMap(Student::getCardNo, Student::getName)); 

また、あなたがCollectors.toMapの静的インポートを追加し、表現をより読みやすくすることができます:ここで

+0

私はラムダがこのような場合にはもっと読みやすくシンプルでなければならないと考えましたが、@トニーの答えは反対です。 –

+0

@ O.Badrはい。これは読めるし、従うのが簡単です。対照的に、私はTonyの答えのコードを記述するために "train wreck"という用語を使用します。コードが読み込めない場合は、IMHO「悪い」です。 – Bohemian

1

は簡単な方法です。

+0

@ O.Badrはこの簡潔な方法でラムダをチェックします。それが合っている場合は、受け入れられた回答としてマークしてください。 – GiovanyMoreno

関連する問題