Java 8流API-根据条件过滤并收集对象

Lea*_*oop 4 java java-8 slamdata

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

在主要班级

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. 
Run Code Online (Sandbox Code Playgroud)

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

如何收集所有拥有语言"java"的emp对象.我能怎么做?

Swe*_*per 7

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

您应该将所有逻辑放在filter:"保留Emp对象(如果getLanguage包含"java"").

empList.stream()
    .filter(x->x.getLanguage().contains("java"))
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)