2016-05-11 2 views
0

Я хотел использовать потоковый API на моем проекте Lightweight-Stream-API и RetroLambdaAndroid о потоке апи

Код:

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) {} 
} 

Как реорганизовать этот код, чтобы использовать потоки, например, Stream.of() способ?

ответ

1

Stream.of принимает List/Iterator/Iterable, поэтому вы можете просто написать Stream.of(hashMap.entrySet()) или Stream.of(hashMap) и выполнить итерацию над записями карты Stream API. Затем вы можете фильтровать только ненулевые значения filter(entry -> entry.getValue() != null) и выполнять операции в методе forEach.

Чтобы пропустить ненужные блоки try/catch, используйте класс Exceptional (только для функции LSA).

Код:

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 
     })); 
Смежные вопросы