Фильтрация списка POJO с использованием потоков - получение ClassCastException java.util.LinkedHashMap не может быть приведено - PullRequest
0 голосов
/ 18 сентября 2018

Как бы ни был знаком вопрос, моя проблема немного странная.

Это мой 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());

То же исключение.Без изменений вообще.Я где-то читал, что исключение связано с сериализацией Джексона.

Как фильтровать списки, используя потоки и Джексона одновременно?Я не могу найти решение.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Нет проблем в первом примере:

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

Я только что заметил, что скобки отсутствуют: равно ("POJOName") для закрытия параметров фильтра.

0 голосов
/ 18 сентября 2018

Вы можете попробовать:

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

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