Java 8 stream API- Filter based on condition and collect the object

流过昼夜 提交于 2020-01-02 06:25:09

问题


In java 8 , collect emp object based on some filter condition.

in main class

List<Emp> empList = Arrays.asList(
    new Emp("aaa", language1), 
    new Emp("cc", language2),
    new Emp("bb", language3), 
    new Emp("dd", language3)
);

empList.stream()
    .flatMap(s->s.getLanguage().stream())
    .filter(s->s.equals("java"))
    .forEach(System.out::println); //Here just i am printing. 

Actually I need to collect new List<EMP>

How to collect emp object who are all have language "java". How can I do?


回答1:


You should not use flatMap if you want to collect Emp objects in the end because it will change every element to something else and it can be quite hard to map them back.

You should put all your logic in a filter: "keep the Emp object if getLanguage contains "java"".

empList.stream()
    .filter(x->x.getLanguage().contains("java"))
    .collect(Collectors.toList());



回答2:


You can also do like this.

List<Object> optionMetas = new ArrayList<>();
Map<Long, Object> optionIdMetaMap_ = optionMetas.stream().filter(option -> option.getXX() || option.getXXX().equal("java"))
                            .collect(Collectors.toMap(Object::getKEY, item-> item));

Add your relevant condition in filter()



来源:https://stackoverflow.com/questions/47787247/java-8-stream-api-filter-based-on-condition-and-collect-the-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!