簡體   English   中英

使用流過濾POJO列表-無法強制轉換ClassCastException java.util.LinkedHashMap

[英]Filter a list of POJO using streams - getting ClassCastException java.util.LinkedHashMap cannot be cast

盡管問題很熟悉,但我的問題有點奇怪。

這是我擁有的POJO:

public class POJO implements Serializable {
    @JsonProperty("ID")
    private UUID id;

    @JsonProperty("Name")
    private String name;

    // getters and setters
}

我正在嘗試使用以下代碼過濾此POJO的列表:

List<POJO> pojoList = getListOfPojosFromSomeMethod();
List<POJO> filteredPOJO = pojoList.stream()
                          .filter(p -> p.getName().equals("POJOName"))
                          .collect(Collectors.toList())

我無法過濾列表。 我得到以下異常:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.models.POJO
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining (ArrayList.java:1374)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at 
java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)

我也嘗試使用地圖:

List<POJO> pojoList = getListOfPojosFromSomeMethod();
List<POJO> filteredPOJO = pojoList.stream()
                          .filter(p -> p.getName().equals("POJOName")
                          .map(p -> new POJO(p))
                          .collect(Collectors.toList());

同樣的例外。 沒有任何改變。 我在某處讀到例外是由於Jackson序列化。

如何同時使用流和Jackson過濾列表? 我找不到解決方案。

提前致謝。

你可以試試 :

Predicate<POJO> filterPredicate = item -> "POJOName".equals(item.getName());

List<POJO> filteredPOJOs = pojoList.stream()
                      .filter(filterPredicate)
                      .collect(Collectors.toList())

在第一個示例中沒有問題:

    List<POJO> filteredPOJO = pojoList.stream()
                      .filter(p -> p.getName().equals("POJOName"))
                      .collect(Collectors.toList());

我只是注意到在:equals(“ POJOName”)之后缺少括號以關閉過濾器參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM