你可以使用Java 8的流來實現這個功能。假設你有兩個包含對象的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
這是根據list2中的屬性值過濾掉了list1中不包含這部分屬性的對象。你可以根據自己的實際需要修改代碼,適應不同的數據類型和屬性名稱。
要是類中有很多屬性那該怎么寫?
如果類中有很多屬性,你可以根據需要編寫適合的篩選條件來過濾掉不符合要求的對象。下面是一個示例,演示了如何根據類中的多個屬性進行過濾。
假設你有一個名為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
這是根據定義的條件過濾掉了personList中不符合要求的Person對象。你可以根據自己的實際需求修改代碼,添加或修改篩選條件,以適應不同的屬性和值。
要是兩個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
這是根據list1中元素的id屬性值過濾掉了list2中不包含這部分屬性的元素。你可以根據自己的實際需要修改代碼,適應不同的數據類型和屬性名稱。
要是過濾后想保留集合中的整個對象如何書寫?
如果你希望在過濾后保留集合中的整個對象,而不僅僅是屬性值,你可以在過濾時使用 anyMatch() 方法來判斷某個屬性值是否存在于另一個集合中,然后將通過判斷的對象保留下來。下面是一個示例代碼:
import java.util.ArrayList;
import java.util.List;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 = new ArrayList<>();for (Element obj2 : list2) {if (list1.stream().anyMatch(obj1 -> obj1.getId() == obj2.getId())) {filteredList.add(obj2);}}filteredList.forEach(obj -> System.out.println(obj.getName()));}
}
在上面的例子中,我們有兩個集合 list1 和 list2,它們包含了 Element 對象并具有相應的屬性。我們通過遍歷 list2 中的元素,使用 anyMatch() 方法檢查該元素的 id 屬性是否存在于 list1 中的任意一個元素中。如果存在,則將該對象添加到 filteredList 集合中。最后,我們打印輸出 filteredList 中的元素的 name 屬性。
輸出的結果將會是:
X
Y
Z
這樣就根據 list1 中的對象的某個屬性值過濾掉了 list2 中不包含這部分屬性的元素,并保留了整個對象。你可以根據具體的需求修改代碼以適應不同的數據類型和屬性名稱。