一片文章搞定stream流所有常用场景,配案例,不断更新......

不说废话,直入正题.如果对您有帮助,希望点赞关注好评三连......

 实体类:

@Data
public class Student {
    private String id;
    private String name;
    private Integer age ;
    public Student(String id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
}

1.list<对象>转set,获取对象某一属性的集合,并去重.

List<Student> list = new ArrayList<>();

list.add(new Student("4", "张三", 20));
list.add(new Student("3", "李四", 18));
list.add(new Student("2", "王五", 17));
list.add(new Student("2", "赵六", 19));

Set<String> collect = 
list.stream().map(Student::getId).collect(Collectors.toSet());
        
System.out.println(collect);

打印结果为:
[2, 3, 4]

 2.list<对象> 转map<String,Object>,key是实体类中的某一属性,value是对象本身,如果有两个重复的key,则取第一个.

List<Student> list = new ArrayList<>();
list.add(new Student("4", "张三", 20));
list.add(new Student("3", "张三", 18));
list.add(new Student("2", "王五", 17));
list.add(new Student("2", "赵六", 19));

Map<String, Object> map = 
list.stream().
collect(Collectors.toMap(Student::getName, Function.identity(), (k1, k2) -> k1));

//将map转换成成entrySet方便您直观查看结果
Set<Map.Entry<String, Object>> entries = map.entrySet();
        
for (Map.Entry<String, Object> entry : entries) {
       System.out.println(entry);
    }


打印结果:
张三=Student(id=4, name=张三, age=20)
王五=Student(id=2, name=王五, age=17)
赵六=Student(id=2, name=赵六, age=19)

 3.List<对象>转Map<String,List<对象>>,key是根据对象的某一属性分组过后的(比如name都是''张三''),List则是name都是张三的集合.

List<Student> list = new ArrayList<>();

list.add(new Student("4", "张三", 20));
list.add(new Student("3", "王五", 18));
list.add(new Student("2", "王五", 17));
list.add(new Student("2", "张三", 19));

Map<String,List<Student>> map =  list.stream().collect(Collectors.groupingBy(Student::getName));

//将map转换成成entrySet方便您直观查看结果
Set<Map.Entry<String, List<Student>>> entries = map.entrySet();
for (Map.Entry<String, List<Student>> entry : entries) {
    System.out.println(entry);        
 }

打印结果:
张三=[Student(id=4, name=张三, age=20), Student(id=2, name=张三, age=19)]
王五=[Student(id=3, name=王五, age=18), Student(id=2, name=王五, age=17)]

4.map转list<对象>

Map<String, String> map = new HashMap<>();
map.put("1", "张三");
map.put("2", "李四");
map.put("3", "王五");
map.put("4", "赵六");

//这里用到箭头函数,lambda表达式
List<Student> list = map.entrySet().stream().
map(e -> {

Student student = new Student();
student.setId(e.getKey());
student.setName(e.getValue());

return student;
}).collect(Collectors.toList());


for (Student student : list) {
  System.out.println(student);
  }

//打印结果:
Student(id=1, name=张三, age=null)
Student(id=2, name=李四, age=null)
Student(id=3, name=王五, age=null)
Student(id=4, name=赵六, age=null)

5.用stream实现计算list的指定某个属性值的个数 

 List<Student> list = new ArrayList<>();
list.add(new Student("4", "张三", 20));
list.add(new Student("3", "王五", 18));
list.add(new Student("2", "王五", 20));
list.add(new Student("2", "赵六", 20));

long count = list.stream().
 filter(Student -> Objects.equals(Student.getAge(), 20)).count();

System.out.println(count);

打印结果:
3

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值