两个list对于一个满足条件的过滤实现

假设你有两个包含对象的List,每个对象有一个属性,你想根据一个List中的属性值来过滤掉另一个List中不包含这个属性值的对象。下面是一种使用流的方式来实现这个功能

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
class MyClass {
    private String property;
 
    public MyClass(String property) {
        this.property = property;
    }
 
    public String getProperty() {
        return property;
    }
}
 
public class Main {
    public static void main(String[] args) {
        List<MyClass> list1 = new ArrayList<>();
        list1.add(new MyClass("A"));
        list1.add(new MyClass("B"));
        list1.add(new MyClass("C"));
        
        List<String> list2 = new ArrayList<>();
        list2.add("A");
        list2.add("B");
        
        List<MyClass> filteredList = list1.stream()
                .filter(obj -> list2.contains(obj.getProperty()))
                .collect(Collectors.toList());
 
        filteredList.forEach(obj -> System.out.println(obj.getProperty()));
    }
}

在上面的例子中,我们有两个List:list1包含了MyClass对象,每个对象有一个属性property;list2包含了一些属性值。我们使用流来筛选list1中的对象,只保留那些property值在list2中存在的对象,最后将筛选后的结果收集到filteredList中。

输出的结果将会是:

A
B

要是类中有很多属性那该怎么写?
如果类中有很多属性,你可以根据需要编写适合的筛选条件来过滤掉不符合要求的对象。下面是一个示例,演示了如何根据类中的多个属性进行过滤。

假设你有一个名为Person的类,该类有多个属性,包括name、age和gender。你想根据一组条件对Person对象进行过滤,这些条件包括age大于等于18,同时gender为"male"。下面是一个使用流的示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
class Person {
    private String name;
    private int age;
    private String gender;
 
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
 
    public String getName() {
        return name;
    }
 
    public int getAge() {
        return age;
    }
 
    public String getGender() {
        return gender;
    }
}
 
public class Main {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Alice", 28, "female"));
        personList.add(new Person("Bob", 20, "male"));
        personList.add(new Person("Charlie", 25, "male"));
        personList.add(new Person("Diana", 16, "female"));
 
        List<Person> filteredList = personList.stream()
                .filter(person -> person.getAge() >= 18 && person.getGender().equals("male"))
                .collect(Collectors.toList());
 
        filteredList.forEach(person -> System.out.println(person.getName()));
    }
}

  

在上面的例子中,我们定义了一个Person类,该类有三个属性:name、age和gender。我们使用流的filter操作来对personList中的对象进行筛选,只保留那些满足age大于等于18并且gender为"male"的对象。最后,我们将筛选结果收集到filteredList中,并打印每个对象的name属性。

输出的结果将会是:

 

Bob
Charlie

要是两个list中的元素对象存在多个属性。如何根据一个list中的对象的某个属性去过滤另一个集合元素?
如果两个集合中的元素对象有多个属性,并且你想要根据一个集合中的对象的某个属性值,来过滤另外一个集合中的元素,你可以使用流和条件谓词来实现。下面是一个示例代码,演示了如何根据一个集合中的对象的某个属性值,过滤另一个集合中的元素:

 

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
 
class Element {
    private int id;
    private String name;
 
    public Element(int id, String name) {
        this.id = id;
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public String getName() {
        return name;
    }
}
 
public class Main {
    public static void main(String[] args) {
        List<Element> list1 = new ArrayList<>();
        list1.add(new Element(1, "A"));
        list1.add(new Element(2, "B"));
        list1.add(new Element(3, "C"));
 
        List<Element> list2 = new ArrayList<>();
        list2.add(new Element(1, "X"));
        list2.add(new Element(2, "Y"));
        list2.add(new Element(3, "Z"));
 
        List<Element> filteredList = list2.stream()
                .filter(obj -> list1.stream()
                        .map(Element::getId)
                        .collect(Collectors.toList())
                        .contains(obj.getId()))
                .collect(Collectors.toList());
 
        filteredList.forEach(obj -> System.out.println(obj.getName()));
    }
}

  

在上面的例子中,我们有两个集合list1和list2,每个集合包含了Element对象,每个对象有两个属性:id和name。我们使用流来筛选list2中的元素,只保留那些id值在list1中存在的元素,最后将筛选后的结果收集到filteredList中。

输出的结果将会是:

X
Y
Z

如果您觉得我所提供的信息对您有帮助,欢迎您点赞、收藏和评论。如果您想要更深入的交流,您可以添加我的微信号,或者关注我的微信公众号。您的支持和鼓励是我持续写作的动力,我期待与您互动并提供更多有价值的信息。

 



posted @ 2025-04-24 15:38  逝年的我们  阅读(79)  评论(0)    收藏  举报