2016-05-11 8 views
0

Ich wollte Strom api auf mein Projekt Lightweight-Stream-API und RetroLambdaAndroid über Strom api

-Code verwenden: Ströme

Map<String, Object> liste = new HashMap<>(); 
for (Map.Entry<String, ?> data : tumListe.entrySet()) { 
    try{ 
     if (data.getValue() != null) { 
      if(data.getValue() instanceof String){ 
       try { 
        liste.put(data.getKey(), new Gson().fromJson(((String) data.getValue()), new TypeToken<List<String>>(){}.getType())); 
       }catch (JsonIOException ignored){ 
        continue; 
       }catch (JsonParseException ignored){ 
        continue; 
       } 
      } 

      liste.put(data.getKey(), data.getValue()); 
     } 
    } catch (NullPointerException | ClassCastException ignored) {} 
} 

Wie kann ich Refactoring diesen Code beispielsweise verwenden Stream.of() Methode?

Antwort

1

Stream.of dauert List/Iterator/Iterable, so können Sie einfach schreiben Stream.of(hashMap.entrySet()) oder Stream.of(hashMap) und über Map-Einträge mit Stream API iterieren. Als Nächstes können Sie nur Nicht-Null-Werte filter(entry -> entry.getValue() != null) filtern und Operationen in der Methode forEach ausführen.

Um unnötige Try/Catch-Blöcke zu überspringen, verwenden Sie Exceptional Klasse (nur LSA-Funktion).

Code:

Map<String, Object> liste = new HashMap<>(); 
Stream.of(tumListe) 
     .filter(data -> data.getValue() != null) 
     .forEach(data -> Exceptional.of(() -> { 
      if (data.getValue() instanceof String) { 
       liste.put(data.getKey(), new Gson().fromJson((String) data.getValue())); 
      } else { 
       liste.put(data.getKey(), data.getValue()); 
      } 
      return null; // irrelevant, for Exceptional result 
     }));