2016-06-10 6 views
-1
folgende Datenstruktur Gegeben

:Wie mache ich mehrere Suchen mit Java 8 Stream?

Class Adresse enthält:

 AddressId primary key 
     Type  can be "MAIL" or "LEGAL" 
     Address text field containing address 
     PersonId foreign key to another Person Class 

Szenario 1 Pseudocode:

List<Address> addresses = new List<Address>(); 
addresses.add(new Address(1,"MAIL","123 Main St",1)); 
addresses.add(new Address(2,"LEGAL","456 Main St",1)); 

//In this scenario I want the "MAIL" record to be returned 
addresses.stream().filter(e->e.getType().equals("MAIL")).findFirst().orElse(...); 

Szenario 2 Pseudocode:

List<Address> addresses = new List<Address>(); 
addresses.add(new Address(1,"LEGAL","891 Main St",2)); 

//In this scenario I want the "LEGAL" record to be returned 
addresses.stream().filter(e->e.getType().equals("MAIL")).findFirst().orElse(...); 

Szenario 3 pseudo Code:

Viel apprizierte, wenn jemand mit der Stromlinie des Codes oben helfen kann, die alle 3 Szenarien behandeln kann.

+1

Ich bin mir nicht sicher, ob ich Szenario 2 verstehe: Warum sollte das Filtern von MAIL die LEGAL-Adresse erzeugen? Was ist mit deinem aktuellen Code falsch? – Tunaki

+1

Machen Sie einfach eine Methode, die den Typ und eine Standardeinstellung –

+0

Was meinst du, "alle drei Szenarien behandeln"? Mach alle drei gleichzeitig? Wählen Sie zwischen einem der drei? –

Antwort

0

Wenn Ihre Liste von Adressobjekten ist nicht sehr groß, ich würde Gruppe sie in einer HashMap:

List<Address> addresses = getAddressesFromStream(); // populate this list with all your Address objects 

    // now populate the HashMap 
    Map<String, List<Address>> typeMap = new HashMap<String, List<Address>>(); 

    for (Address address: addresses) { 
     String type; 
     if (StringUtils.isBlank(address.getType())) { 
      type = "EMPTY"; 
     } else { 
      type = address.getType(); 
     } 

     List<Address> group; 
     if (!typeMap.containsKey(type)) { 
      group = new ArrayList<Address>(); 
      typeMap.put(type, group); 
     } 

     group = typeMap.get(type); 
     group.add(address);   
    } 

Hoffnung, dass Ihr Problem passt.