1、数字过滤
/**
* 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10过滤奇数,只留下偶数。
* 并将结果保存起来
*/
ArrayList<Integer> numbers = new ArrayList<>();
Collections.addAll(numbers, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> collect = numbers.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());
System.out.println(collect);
2、字符串过滤并手机
/**
* 练习:
* 创建一个ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年龄“zhangsan,23“lisi,24”
* “wangwu,25”
* 保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
*/
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "zhangsan,23", "lisi,24", "wangwu,25");
Map<String, String> stringMap = list.stream().filter(s -> 24 <= Integer.parseInt(s.split(",")[1])).collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));
System.out.println(stringMap);
3、自定义对象收集并过滤
/**
* 现在有两个ArrayList集合
* 第一个集合中:存储6名男演员的名字和年龄。第二个集合中:存储6名女演员的名字和年龄姓名和年龄中间用逗号隔开。比如:张三,23要求完成如下的操作:
* 1,男演员只要名字为3个字的前两人
* 2,女演员只要姓杨的,并且不要第一个
* 3,把过滤后的男演员姓名和女演员姓名合并到一起
* 4,将上一步的演员信息封装成Actor对象。
* 将所有的演员对象都保存到List集合中
* 备注:演员类Actor,属性只有一个: name,age
*/
ArrayList<String> boys = new ArrayList<>();
ArrayList<String> girls = new ArrayList<>();
Collections.addAll(boys, "李1,38", "范2宇,12", "王3来,34", "杨4亭,56", "毛5培,23");
Collections.addAll(girls, "马1云,43", "杨帅2,18", "杨3航,28", "张4彬,32", "王5宇,23");
Stream<String> stream1 = boys.stream().filter(s -> s.split(",")[0].length() == 3).limit(2);
Stream<String> stream2 = girls.stream().filter(s -> s.startsWith("杨")).skip(1);
// List<Actor> collect1 = Stream.concat(stream1, stream2).map(new Function<String, Actor>() {
// @Override
// public Actor apply(String s) {
// String name = s.split(",")[0];
// Integer age = Integer.parseInt(s.split(",")[1]);
// Actor actor = new Actor();
// actor.setName(name);
// actor.setAge(age);
// return actor;
// }
// }).collect(Collectors.toList());
// System.out.println(collect1);
//
// System.out.println("-------------------优化完-----------------");
// List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> {
// Actor actor = new Actor();
// actor.setName((s.split(",")[0]));
// actor.setAge(Integer.parseInt(s.split(",")[1]));
// return actor;
// }).collect(Collectors.toList());
List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> new Actor((s.split(",")[0]),Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());
System.out.println(collect2);
完整代码
package com.leitao.demo.code;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Description: TODO
* @Author Leo
* @Date 2023/1/3
* @Version V1.0
**/
public class streamDemo5 {
public static void main(String[] args) {
/**
* 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10过滤奇数,只留下偶数。
* 并将结果保存起来
*/
ArrayList<Integer> numbers = new ArrayList<>();
Collections.addAll(numbers, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> collect = numbers.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());
System.out.println(collect);
System.out.println("===================华丽的分割线===================");
/**
* 练习:
* 创建一个ArrayList集合,并添加以下字符串,字符串中前面是姓名,后面是年龄“zhangsan,23“lisi,24”
* “wangwu,25”
* 保留年龄大于等于24岁的人,并将结果收集到Map集合中,姓名为键,年龄为值
*/
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "zhangsan,23", "lisi,24", "wangwu,25");
Map<String, String> stringMap = list.stream().filter(s -> 24 <= Integer.parseInt(s.split(",")[1])).collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));
System.out.println(stringMap);
System.out.println("===================华丽的分割线===================");
/**
* 现在有两个ArrayList集合
* 第一个集合中:存储6名男演员的名字和年龄。第二个集合中:存储6名女演员的名字和年龄姓名和年龄中间用逗号隔开。比如:张三,23要求完成如下的操作:
* 1,男演员只要名字为3个字的前两人
* 2,女演员只要姓杨的,并且不要第一个
* 3,把过滤后的男演员姓名和女演员姓名合并到一起
* 4,将上一步的演员信息封装成Actor对象。
* 将所有的演员对象都保存到List集合中
* 备注:演员类Actor,属性只有一个: name,age
*/
ArrayList<String> boys = new ArrayList<>();
ArrayList<String> girls = new ArrayList<>();
Collections.addAll(boys, "李1,38", "范2宇,12", "王3来,34", "杨4亭,56", "毛5培,23");
Collections.addAll(girls, "马1云,43", "杨帅2,18", "杨3航,28", "张4彬,32", "王5宇,23");
Stream<String> stream1 = boys.stream().filter(s -> s.split(",")[0].length() == 3).limit(2);
Stream<String> stream2 = girls.stream().filter(s -> s.startsWith("杨")).skip(1);
// List<Actor> collect1 = Stream.concat(stream1, stream2).map(new Function<String, Actor>() {
// @Override
// public Actor apply(String s) {
// String name = s.split(",")[0];
// Integer age = Integer.parseInt(s.split(",")[1]);
// Actor actor = new Actor();
// actor.setName(name);
// actor.setAge(age);
// return actor;
// }
// }).collect(Collectors.toList());
// System.out.println(collect1);
//
// System.out.println("-------------------优化完-----------------");
// List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> {
// Actor actor = new Actor();
// actor.setName((s.split(",")[0]));
// actor.setAge(Integer.parseInt(s.split(",")[1]));
// return actor;
// }).collect(Collectors.toList());
List<Actor> collect2 = Stream.concat(stream1, stream2).map(s -> new Actor((s.split(",")[0]),Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());
System.out.println(collect2);
}
}
package com.leitao.demo.code;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Description: TODO
* @Author Leo
* @Date 2023/1/4
* @Version V1.0
**/
@Data
@AllArgsConstructor
public class Actor {
private String name;
private Integer age;
}
![](https://i-blog.csdnimg.cn/blog_migrate/80ada11318c4fd6f0dfc506de0dc4e43.png)