Java8stream().filter()过滤器的使⽤
需求
现在有这么⼀个需求,在⼀个list数组⾥⾯存了⼀些数据,我想要取出特定条件下的数据。⽐如我想取出学⽣的年龄在10岁以上的,再⽐如想取出张三这个⼈的⼀些信息。
思路解决
如果想要拿到⼀组list中的⼀些数据,就是对数据进⾏⼀些筛选,我们的原⽣⽅法就是遍历list数组,然后作判断,拿出相应条件的数据。这是⼀种很⿇烦的⽅法,所以在Java 8 就出现了⼀种很简单的⽅法,过滤器。只需要很简单的⼀⾏,就可以拿到你想要的数据。
具体代码讲解
;
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public Integer getAge(){
return age;
}
public void setAge(Integer age){
this.age = age;
}
}
;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class streamTest {
public static void main(String[] args){
Person[] person ={new Person("moon",18),new Person("cc",3)};
//将数组转成list
List<Person> list = Arrays.asList(person);
List<Person> list = Arrays.asList(person);
//⼀个条件筛选
Person result1 = list.stream().filter(p ->"moon".Name()))
.findAny().orElse(null);//如果不到数据会返回null。orElse()是设置不到数据后的默认值。        System.out.Name());//moon
//多个条件筛选
Person result2 = list.stream().filter(p ->"oo".Name())&&18== p.getAge()) .findAny().orElse(new Person("liang",20));
System.out.Name());//liang
String name = list.stream().filter(p ->"moon".Name())).map(Person::getName) .findAny().orElse("");// moon
System.out.println(name);
List<String> names = list.stream().filter(p ->"moon".Name())).map(Person::getName) .List());
names.forEach(System.out::println);//moon
}
}filter过滤对象数组
总结
使⽤过滤器很容易就可以选出符合特定条件的数据,并且还减少了代码量。
补充
现在想提取出来name这⼀列,那么应该怎么做呢?
List<String> nameList = list.stream().map(Person::getName).List());