2016-03-30 8 views
7

Collectors.toMap numaralı telefonu kullanarak bir haritaya bir listeyi dönüştürmeyi deneyin. Liste ActivityReconcile nesneden oluşmaktadır. Listedeki her giriş için bir örneğini toMap aramasına iletmek istiyorum.java 8 Listeyi örneklenecek şekilde haritaya çevirme listesi

Kod aşağıda yer almaktadır ve örneklere ihtiyacım olan yere göre gösterilir ??. Seni doğru anladıysam

final List<ActivityReconcile> activePostedList = loader.loadActivePosted(accessToken); 
Map<AccountTransactionKey, ActivityReconcile> postedActiveMap = 
activePostedList.stream().collect(
Collectors.toMap(
AccountTransactionKey.createNewAccountTransactionKeyFromActivityReconcileRecord(??),??)); 
+0

Soru şu ki * ben * açık değildir. Lütfen belirtin misiniz lütfen? –

+1

Harita iki argüman alır: anahtar ve değer. Peki, beklenen çıktı haritasının anahtarı ve değeri nedir? –

+1

'toMap (İşlev tuşunu genişletirMapper, İşlev değerini değiştirirPapper)' Bu yöntem iki argüman alır. Anahtar ve/veya değerlerin belirlenmesini nasıl öneriyorsunuz? Man, bu yöntem adına bakın! "createNewAccountTransactionKeyFromActivityReconcileRecord" –

cevap

4

, ne yerini ettik

public static AccountTransactionKey generate(ActivityReconcile reconcile) {...} 

gibi görünecektir (AccountTransactionKey sınıfta)

Map<AccountTransactionKey, ActivityReconcile> result = choices 
       .stream() 
       .collect(Collectors.toMap(
         AccountTransactionKey::generate, 
         Function.identity())); 

Ve yönteme gibi bir şey gerekir Cevabı daha okunaklı ve anlaşılabilir kılmak içintarafından .

3

ekleyin bir lambda parametresini az değişikliklerle kodunuzu "düzeltmek" için:

activePostedList.stream().collect(Collectors.toMap(
    ar -> AccountTransactionKey.createNewAccountTransactionKeyFromActivityReconcileRecord(ar)), 
    o -> o)); 

veya yöntem başvuru kullanın: Btw

activePostedList.stream().collect(Collectors.toMap(
    AccountTransactionKey::createNewAccountTransactionKeyFromActivityReconcileRecord, o -> o)); 

, ben gördüğümü hatırlamıyorum Metot değeri createNewAccountTransactionKeyFromActivityReconcileRecord - okunabilirlik için, sadece create()'a indirgemeyi düşünün, çünkü geri dönüş tipi ve parametre türü bunu diğer fabrika yöntemlerinden ayırt etmek için yeterlidir.