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

时间:2017-12-13 07:00:01

标签: 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. 

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

如何收集所有拥有语言“java”的emp对象。我该怎么办?

3 个答案:

答案 0 :(得分:5)

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

您应该将所有逻辑放在filter中:&#34;如果Emp包含getLanguage&#34;,请保留"java"对象。

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

答案 1 :(得分:0)

你也可以这样做。

class SampleView(View):

    sample_form = SingleSampleForm

    def get(self, request, *args, **kwargs):

        sample_form = self.sample_form()
        self.context = {'sample_form': sample_form,}

        return render(request,
                'results/single_sample_search.html',
                self.context)

    def post(self, request, *args, **kwargs):
        sample_form = self.sample_form(request.POST)

        if sample_form.is_valid():
            print('Valid')
        else:
            print('not valid')

        self.context = {'sample_form': sample_form,}

        return render(request,
                'results/single_sample_search.html',
                self.context)

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

中添加相关条件

答案 2 :(得分:0)

您可以使用接受过滤器 removeIfpredicate 方法处理 current 列表:

empList.removeIf(e -> !e.getLanguage().equals("java"));

或者您可以将当前列表复制到另一个列表并执行相同操作。