stream(流) 的基本使用

stream(流) 的基本使用


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; 

public class StreamMain {

    public static void main(String[] args) {
        List<User> userList = new ArrayList();
        userList.add(new User("张1", 12, "男"));
        userList.add(new User("张2", 20, "女"));
        userList.add(new User("张3", 18, "男"));
        userList.add(new User("张4", 24, "女"));
        userList.add(new User("张5", 16, "男"));
        userList.add(new User("张1", 12, "男"));
        //谓词筛选filter:该操作会接受一个谓词(一个返回boolean的函数)作为参数,  并返回一个包括所有符合谓词的元素的流
        List<User> collect = userList.stream().filter(user -> user.getAge() == 18).collect(Collectors.toList());
        System.out.println(collect);

        //筛选各异的元素distinct:它会返回一个元素各异(根据流所生成元素的hashCode和equals方法实现)的流。
        userList.stream().distinct().forEach(System.out::println);

        //截短limit:该方法会返回一个不超过给定长度的流。 这里截取前3个
        List<User> collect2 = userList.stream().limit(3).collect(Collectors.toList());
        System.out.println(collect2);

        //跳过skip:返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一个空流。 skip与limit是互补的
        List<User> collect3 = userList.stream().skip(2).collect(Collectors.toList());
        System.out.println(collect3);

        //映射:它会接受一个函数作为参数。这个函数会被应用到每个元素上,并将其映 射成一个新的元素(使用映射一词,是因为它和转换类似,但其中的细微差别在于它是“创建一 个新版本”而不是去“修改”)。
        List<String> collect4 = userList.stream().map(User::getName).collect(Collectors.toList());
        System.out.println(collect4);

        //流的扁平化flatMap:各个数组并不是分别映射成一个流,而是映射成流的内容。
        List<String> words = Arrays.asList("People", "who", "don't","wan", "to","be","slaves");
        List<String> collect6 = words.stream()
                .map(x -> x.split(""))
                .flatMap(Arrays::stream)
                .collect(Collectors.toList());
        System.out.println(collect6);
        /**
         * a b c 和 1 2 3 组合
         */
        List<String> n1 = Arrays.asList("a","b","c");
        List<String> n2 = Arrays.asList("1","2","3");
        List<String[]> collect7 = n1.stream().flatMap(i -> n2.stream().map(j -> new String[]{i, j})) .collect(Collectors.toList());
        collect7.stream().forEach(x-> System.out.println(x[0] + "," + x[1]  ));

//        // 查找userlist中有没有年龄==18的 有就是true
        boolean anyMatch = userList.stream().anyMatch(x -> x.getAge() == 18);
        System.out.println(anyMatch);
//
//        // 查找userlist中有没有年龄==77的 有就是false
        boolean noonMatch = userList.stream().noneMatch(x -> x.getAge() == 77);
        System.out.println(noonMatch);
//
//        // 查找userlist中全部有没有年龄==99的 有就是true
        boolean b = userList.stream().allMatch(x -> x.getAge() != 99);
        System.out.println(b);
//
//        // 查找userlist找到任意一个就返回
        Optional<User> any = userList.stream().findAny();
        System.out.println(any);
//
//        // 查找userlist找到第一个就返回
        Optional<User> first = userList.stream().findFirst();
        System.out.println(first.toString());

        //元素求和 在原来求和是通过for循环来操作的 用reduce这样写
        List<Integer> nums = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
        Integer sum = nums.stream().reduce(0, (x, y) -> x + y);
        System.out.println(sum);
        //元素相× 在原来求和是通过for循环来操作的 用reduce这样写
        Integer sum2 = nums.stream().reduce(1, (x, y) -> x * y);
        System.out.println(sum2);


    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值