Stream流 入门

目录

什么是Stream流

可以解决什么问题

如何使用

中间操作

终结操作

Map、List互转


什么是Stream流

他可以被用来对集合和数组进行链式编程 可以更方便的让我们对集合或者数组进行操作

可以解决什么问题

对集合和数组更便捷的遍历 操作

如何使用

集合对象.Stream() 数组对象Arrays.stream(数组) 或者Stream.of(数组)

对于双列集合 转为单列再操作 例如map.entrySet().stream

中间操作

先创建一个user类

public class User {
    public User(String name, String age, int height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }
    private String name;
    private String age;
    private int height;
}

1.快速创建list集合

User zhangsan = new User("zhangsan", "24", 177);
User lisi = new User("lisi", "30", 182);
User wangwu = new User("wangwu", "42", 196);
​
//Strem流快速创建list
List<User> userList = Stream.of(zhangsan, lisi, wangwu).collect(Collectors.toList());

2.filter: 作用:对集合中的元素进行过滤 将符合条件的元素继续留在流中

 //filter 过滤年龄小于30的user
 userList.stream()
     .filter(user -> Integer.valueOf(user.getAge()) < 30)
     .forEach(obj->System.out.println(obj.toString()));

3.map :作用 :可以用来遍历 类型转换

 //map  
 userList.stream()
    .map(User::getName)
    .forEach(obj->System.out.println(obj.toString()));

4.disinct 可以用来去除重复

 //disinct  对年龄进行过滤
 //再添加一个user
 User wangmazi = new User("wangmazi", "42", 196);
 userList.add(wangmazi);
 userList.stream()
    .map(user -> user.getAge())
    .distinct()
    .forEach(obj->System.out.println(obj.toString()));

5.sorted 对流中的元素进行排序

//对身高进行排序 
// User类实现了Comparable<User>接口  并重写方法
public class User implements Comparable<User> 
​
    @Override
    public int compareTo(User o) {
        return o.getHeight()-this.getHeight();
    }
    
userList.stream()
    .distinct()
    .sorted()
    .forEach(obj->System.out.println(obj.toString()));

6.limit 对流的长度限制

//挑选出身高最高的两个人
userList.stream()
        .distinct() 
        .sorted()
        .limit(2)
        .forEach(obj->System.out.println(obj.toString()));

7.skip 跳过流中的前几个元素 返回剩余的元素

//挑选出身高最低的人
userList.stream()
        .sorted()
        .skip(2)
        .forEach(obj->System.out.println(obj.toString()));
终结操作

1.forEach 对流中的元素遍历

//
//输出所有人的名字
userList.stream()
        .map(user -> user.getName())
        .forEach(name-> System.out.println(name));

2.count 获取当前流中的个数

//count没有参数  记得接收count之后的值
//输出一共有多少人
long count = userList.stream()
        .count();
System.out.println(count);

3.求和 mapToDouble

// int、double、long:类似
double max = userList.stream().mapToDouble(User::getHeight).sum();
System.out.println(max);

4.最值 max&min

//
//输出身高最高  最低
Optional<Integer> max = userList.stream()
        .map(user -> user.getHeight())
        .max((heigjt1, height2) -> heigjt1 - height2);
System.out.println(max.get());
Optional<Integer> min = userList.stream()
        .map(user -> user.getHeight())
        .min((heigjt1, height2) -> heigjt1 - height2);
System.out.println(min.get());

5.collect 将流转换为集合

//
//将名字转为一个集合、
List<String> collect = userList.stream()
        .map(user -> user.getName())
        .collect(Collectors.toList());
collect.stream().forEach(obj-> System.out.println(obj));

6.anyMatch allMactch 见名知意 用来判断流中是否有符合条件的元素

 //
        //判断集合是否有人名为ww
        boolean b = userList.stream()
                .anyMatch(user -> user.getName() == "ww");
        System.out.println(b);
//        判断集合中的user的身高是否都大于167
        boolean c = userList.stream()
                .allMatch(user -> user.getHeight()>167);
        System.out.println(c);

7.findFirst 获取流中的第一个元素

//
//判断流中身高最低的人的身高
Optional<Integer> first = userList.stream()
        .map(user -> user.getHeight())
        .sorted()
        .findFirst();
first.ifPresent(obj-> System.out.println(obj));

8.findAny 获取流中的任意一个元素

//
//判断流中是否有人身高196
Optional<User> any = userList.stream()
        .filter(user -> user.getHeight() == 196)
        .findAny();
any.ifPresent(obj-> System.out.println(obj.getName()));
Map、List互转
//list转haspMap
Map<String, String> collect = userList.stream().collect(Collectors.toMap(User::getAge, User::getName));
//haspMap转list
collect.entrySet().stream()
        .map(user->user.getKey())
        .collect(Collectors.toList())
        .forEach(o-> System.out.println(o));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值