前言:
最近工作中发现使用java8写代码十分方便,所以打算学习下它的stream相关操作。
一、filter过滤数据
stream().filter()可以过滤出自己想要的数据
1.1 基本操作
package com.neo.controller;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Java8Test {
public static void main(String[] args) {
List<String> lines = Arrays.asList("spring", "node", "mkyong");
List<String> result = lines.stream() // 转化为一个流
.filter(line -> "spring".equals(line) || "mkyong".equals(line)) // 只保留list中是"spring"或"mkyong"的数据
.collect(Collectors.toList()); // 把输出流收集回List中
result.forEach(System.out :: println); //spring mkyong
}
}
1.2 findAny() 和 orElse()
Student.java
package com.neo.controller;
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
//getters setters toString
package com.neo.controller;
import java.util.Arrays;
import java.util.List;
public class Java8Test {
public static void main(String[] args) {
List<Student> list = Arrays.asList(
new Student("zhangsan", 30),
new Student("lisi", 20),
new Student("erkang", 40)
);
Student st = list.stream()
.filter(s -> "lisi".equals(s.getName()) || "erkang".equals(s.getName()))
.findAny() // 如果找到了就返回
.orElse(null); // 如果找不到就返回null
System.out.println("==name is: "+st.getName()+" ==age is: "+st.getAge()); //==name is: lisi ==age is: 20
//or like this
Student st2 = list.stream()
.filter(s -> {
if("lisi".equals(s.getName()) || "erkang".equals(s.getName())){
return true;
}
return false;
})
.findAny() // 如果找到了就返回
.orElse(null); // 如果找不到就返回null
System.out.println("==name is: "+st2.getName()+" ==age is: "+st2.getAge()); //==name is: lisi