@Data
@AllArgsConstructor
public class User {
private String name;
private Integer age;
private Integer salary;
}
首先,我们自定义一个User实例类,为我们的List数据源做准备。
1.filter常用的方法:用来过滤条件,比以往的foreach循环每次指定一个条件效率高很多,代码量大量减少,逻辑清晰。
2.collect常用方法:用来得到生成一个新的集合。
public static void main(String[] args) {
//定义一个list,放入user对象参数
List<User> list= Arrays.asList(
new User("张三",26,11000),
new User("李四",23,9800),
new User("小六",24,300000),
new User("小王",32,13000)
);
//Predicate 为我们提供的限制条件的方法 使用Lambda表达式限定条件
Predicate<User> predicate1= User -> User.getAge()<25;
Predicate<User> predicate2= User -> User.getSalary()>12000;
//使用Stream流进行数据输出
List<User> collect=list.stream()
.filter(predicate1.or(predicate2))//filter方法用来限定条件过滤(or 两个条件or的关系)
//.filter(predicate1.and(predicate2)) and是两个条件且的关系
//.filter(User -> User.getAge()<25) 也可以直接用这种方式进行条件限制
.collect(Collectors.toList()); //collect方法根据上面过滤后的条件生成新的集合
System.out.println(collect.toString());
3.forEach常用方法:可以循环输出集合内的符合限制条件的元素,更快的遍历方法。
4.limit常用方法:类似于sql中的limit,限制得到的集合中的元素个数。
//定义一个字符串泛型的集合list1
List<String> list1=Arrays.asList("HELLO","WORLD","LISA","AA");
list1.stream()
//使用lambda表达式 自定义对象名str 过滤字符串长度小于等于4的元素
.filter(str ->str.length()>4)
//循环输出过滤后得到的字符串
.forEach(str -> System.out.println(str));
list1.stream()
//limit方法类似于sql里面的limit 最大得到的元素数量 此处的2表示得到前两个元素
.limit(2)
//循环得到结果
.forEach(str -> System.out.println(str));
5.sorted常用方法:排序,默认按照升序进行排列,使用Comparator.reverseOrder()可以进行降序排列。
6.max常用方法:找出集合中最大的元素。
6.min常用方法:找出集合中最小的元素。
7.get常用方法:得到该元素的方法。
List<Integer> integerList=Arrays.asList(1,7,9,5,6,12,77);//定义一个泛型为Interger的集合list
integerList.stream()
//sorte排序默认为升序排列 参数内为Comparator.reverseOrder()时为降序排列
.sorted(Comparator.reverseOrder())
.forEach(num -> System.out.println(num));
//max方法找出集合中最大的元素 get方法得到这个元素
System.out.println(integerList.stream().max(Integer::compareTo).get());
//min方法找出集合中最小的元素 get方法得到这个元素
System.out.println(integerList.stream().min(Integer::compareTo).get());
//count方法得到集合的长度
System.out.println(integerList.stream().count());
8.map常用方法:map方法可以对集合中的单个元素进行统一处理。
9.reduce常用方法:reduce方法也可以对集合中元素进行统一处理 不同的是 可以得到的是一个累积的值。
//map
integerList.stream()
//map方法可以对集合中的单个元素进行统一处理 例如:每个元素加10
.map(num -> num+10)
.forEach(num -> System.out.println(num));
//reduce
System.out.println(integerList.stream()
//reduce方法也可以对集合中元素进行统一处理 不同的是 可以得到的是一个累积的值 例如:每个元素加10,最终得到所有元素相加的和
.reduce((sum,num) -> sum+num)
.get());
//collection
List<Integer> newlist=integerList.stream()
.filter(num -> num%2==0)
.collect(Collectors.toList());
System.out.println(newlist);
上述就是stream流的一些简单方法使用案例,欢迎大家在评论区补充,谢谢。