集合用stream過濾,集合中物件有firstname,lastname
方法中傳入2個String變數,firstname和lastname,
想按變數內容過濾,
傳入的變數可能有內容,可能是空字串
在filter中變數為空不做過濾,變數不為空則只保留firstname和lastname相符的
這樣的filter怎么寫,謝謝
.stream().filter
uj5u.com熱心網友回復:
就是對集合中的元素做下對比,就像用if .... else... 一樣
public static List<String> filter(List<String> list,String firstName,String lastName){
return list.stream().filter(str -> StringUtils.isEmpty(str)
|| StringUtils.equals(str,firstName) || StringUtils.equals(str,lastName))
.collect(Collectors.toList());
}
uj5u.com熱心網友回復:
我沒表達清楚,再補充一下如下面的集合
List<Person> personList= new ArrayList<Person>();
personList.add(new Person("aaa","111"));
personList.add(new Person("aaa","222"));
personList.add(new Person("bbb","111"));
實作如下的過濾效果
private static List<Person> filterPerson(List<Person> personList,String firstname,String lastname){
//如果firstname ,lastname傳空,不過濾
//如果firstname 傳空,lastname傳 111 過濾 Person("aaa","222")
//如果firstname 傳aaa lastname傳空 過濾 Person("bbb","111")
return personList.stream().filter(......).collect(Collectors.toList());
}
uj5u.com熱心網友回復:
一年多前的貼,沒想到現在才看到!就當練練手,條件判斷我沒有寫,有需要的可以自己去改;
public class Filter {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("aaa", "111"));
personList.add(new Person("aaa", "222"));
personList.add(new Person("ccc", "111"));
filterPerson(personList, "aaa", "111");
}
private static List<Person> filterPerson(List<Person> personList, String firstName, String lastName) {
//過濾掉list中firstName與引數firstName不同的元素
List<Person> firstNameList = personList.stream().filter(selectByKey(Person::getFirstName, firstName)).collect(Collectors.toList());
System.out.println("firstNameList = " + firstNameList);
//過濾掉list中lastName與引數lastName不同的元素
List<Person> lastNameList = personList.stream().filter(selectByKey(Person::getLastName, lastName)).collect(Collectors.toList());
System.out.println("lastNameList = " + lastNameList);
return null;
}
private static <T> Predicate<T> selectByKey(Function<? super T, ?> function, String name) {
return t -> name == function.apply(t);
}
}
@Getter
@Setter
@ToString
class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
uj5u.com熱心網友回復:
// 生成一個 list集合List<Person> list = Stream.of(new Person("aaa", null), new Person(null, "111"), new Person("", "222"), new Person("bbb", ""), new Person("ccc", "333")).collect(Collectors.toList());
// 將list中物件中的firstName屬性或lastName屬性為null或空字串的物件過濾
List<Person> notnull = list.stream().filter(person ->
// firstName屬性為null的攔截
person.getFirstName() != null &&
// lastName屬性為null的攔截
person.getLastName() != null&&
// firstName屬性為空字串的攔截
!"".equals(person.getFirstName()) &&
// lastName屬性為空字串的攔截
!"".equals(person.getLastName())
).collect(Collectors.toList());
uj5u.com熱心網友回復:
滿足條件的留下還是過濾掉老是記不清轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/20870.html
標籤:Java相關
