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


浙公网安备 33010602011771号