我想在我的项目Lightweight-Stream-API和RetroLambda
上使用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()
方法?
答案 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
}));