2017-03-17 4 views
0

Warum wird dieser Code nicht für mich kompiliert? mit Strom und toMap Option KarteJava 8 Collection stream Collectors.toMap

List<CountryToPaymentMethodsDisplayRules> 
    paymentMethodDisplayRulesByCountryList = 
     gatway.getCountryPaymentMethodsDisplayRulesByCountry(); 

Map<PaymentMethod, CountryToPaymentMethodsDisplayRules> 
    countryToPaymentMethodsDisplayRulesMap = paymentMethodDisplayRulesByCountryList 
     .stream() 
     .collect(Collectors.toMap(type -> type.getCountryToPaymentMethodsDisplayRules().getPaymentMethod(), 
           type -> type)); 

public interface PaymentMethod extends Serializable { 
} 

public enum PaymentMethodType implements PaymentMethod, Serializable { 
} 

public interface CountryToPaymentMethodsDisplayRules { 
    public PaymentMethod getPaymentMethod(); 
} 

public class CountryToPaymentMethodsDisplayRulesEntity implements CountryToPaymentMethodsDisplayRules, PersistentEntity<Long>, Serializable { 
    @Type(type = "com.plimus.core.payment.PaymentMethodTypeUserType") 
    @Column(name = "PAYMENT_TYPE") 
    private PaymentMethod paymentMethod; 
} 

Ich versuche Liste zu konvertieren Was ist hier falsch?

+2

Well Sie einen Code zur Verfügung gestellt haben (was ich für Sie neu formatiert haben - bitte lesen Sie die Formatierung Hilfe und Posting zu vermeiden, bis die Vorschau vernünftige Formatierung zeigt), aber Sie haben nicht gesagt, in welcher Weise es funktioniert nicht ... Im Idealfall schreibe dies als [mcve] um. –

+2

Ich kann die Methode getCountryToPaymentMethodsDisplayRules nicht finden. Könnten Sie einige Informationen zu dieser Methode bereitstellen? –

+3

In der Tat, was * ist hier falsch? Wird eine Ausnahme erzeugt? Wird eine leere Karte erstellt? Läuft es auf unbestimmte Zeit? Wir werden es vielleicht nie wissen! –

Antwort

1

den Dank

Problem gefunden
Map<PaymentMethod, CountryToPaymentMethodsDisplayRules> 
countryToPaymentMethodsDisplayRulesMap = paymentMethodDisplayRulesByCountryList 
    .stream() 
    .collect(Collectors.toMap(type -> type.getPaymentMethod(), 
          type -> type)); 
+4

Glauben Sie wirklich, dass das Finden, dass das Aufrufen einer Methode, die nicht existiert, durch Entfernen des Methodenaufrufs behoben werden kann, für zukünftige Leser einen Wert hat? – Holger

7

Sie haben soeben die Collections.toMap() Methode mit einer Methode Referenz zur Verfügung stellen müssen und eine Identität. Versuchen Sie folgendes:

Map<PaymentMethod, CountryToPaymentMethodsDisplayRules> 
    countryToPaymentMethodsDisplayRulesMap = paymentMethodDisplayRulesByCountryList 
    .stream() 
    .collect(Collectors.toMap(CountryToPaymentMethodsDisplayRules::getPaymentMethod,x->x); 
+2

verstehe nicht, warum das Upvoted ist. Methodenreferenz löst kein Problem und es gibt keine "Collectors.toMap" -Funktion mit einem einzigen Parameter ... – Roland

+0

@Roland, Sie haben absolut Recht. Das war ein Fehler meinerseits Ich werde es jetzt beheben :) – CraigR8806

+1

viel besser ;-) – Roland