关于stream api的Android

时间:2016-05-11 17:30:38

标签: android hashmap java-stream

我想在我的项目Lightweight-Stream-APIRetroLambda

上使用stream api

代码:

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 个答案:

答案 0 :(得分: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
        }));