好吧,我有一個地圖列表,我想過濾然後收集到另一個地圖列表。每次我通過這個過程放入List時,我都會得到一個對象列表...幫助?!Java 8過濾和收集列表<Map <String,Object >>
List<Map<String, Object>> segments = (List<Map<String, Object>>) (List<?>) query.getResultList();
List<Map<String, Object>> segmentsWithMoreVersions = segments.stream()
.filter((Object s) -> {
Object[] ss = (Object[]) s;
if(((Long) ss[2]) == 1)
{
return false;
}
return true;
})
.collect(Collectors.toList());
正如你可以看到... ...在過濾方法我已經使用的對象,因爲我不能得到的s變量是一個地圖。當我嘗試時,我得到一個ClassCastException。
編輯:好的,需要也許更多信息... 所以我segments
變量是像這樣:
[
{'name': 'ABC', 'version': 1, 'ct': 1},
{'name': 'AAA', 'version': 1, 'ct': 1},
{'name': 'BFD', 'version': 1, 'ct': 4},
{'name': 'SDE', 'version': 1, 'ct': 1}
]
我想要做的是過濾掉所有具有克拉的地圖1. 過濾方法正在查看該對象(因爲我無法將其轉換爲Map)並檢查它是否爲1,如果是,它不會將其返回給流。
EDIT2:的意見後,我編輯以下幾點:
List<Map<String, Object>> segmentsWithMoreVersions = segments.stream()
.filter(m -> ((Long) m.get("ct")) != 1L)
.collect(Collectors.toList());
而且我得到以下幾點:Caused by: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.util.Map
你需要向我們解釋'過濾器'應該做什麼。這沒有任何意義。 – Radiodef
我不明白? 'filter'正在過濾List ...什麼沒有意義? – BoxMan0617
當你在'segments.stream()'上調用'filter'時,你需要傳遞一個'Predicate