Java 8流API-基于条件过滤并收集对象

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/47787247/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 09:48:26  来源:igfitidea点击:

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

javajava-8slamdata

提问by Learn Hadoop

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

在 java 8 中,根据一些过滤条件收集 emp 对象。

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>

其实我需要收集 new List<EMP>

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

如何收集都有语言“java”的emp对象。我能怎么做?

回答by Sweeper

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

flatMap如果您Emp最终想收集对象,则不应使用,因为它会将每个元素更改为其他元素,并且很难将它们映射回来。

You should put all your logic in a filter: "keep the Empobject if getLanguagecontains "java"".

您应该将所有逻辑放在filter:“Emp如果getLanguage包含,则保留对象"java"”。

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

回答by Ravi Sapariya

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()

添加您的相关条件 filter()