Java8-Stream

文章目录

特点

  • 代码简洁:函数式编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。
  • 多核友好: Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下方法。

流程

  • 第一步:把集合转换为流stream
  • 第二步:操作stream流,stream流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果

操作符

中间操作符

流方法作用
filter用于通过设置的条件过滤出元素
distinct返回一个去重(根据元素的hashCode和equals方法判断)后的流
limit会返回一个不超过定长的流
skip返回一个删除了前n个元素的流
map接受一个函数作为参数,应用到每一个元素,并映射成一个新的元素
sorted对流排序
public class StreamTest {

    public static void main(String[] args) {
        List<String> stringList = Arrays.asList("abc", "fds", "hli", "hli");
        /**
         * @Description:filter(表达式条件):过滤掉不符合条件的集合元素,第一个str是参数(代表集合元素,方便遍历),第二是该参数的过滤逻辑
        */
        List<String> result = stringList.stream().filter(str -> str.contains("f"))
                .collect(Collectors.toList());
        System.out.println(result);
        /**
         * @Description:distinct():元素去重,如果是引用类型,要重写equals方法和hashCode方法,String已经帮我们重写了这两个方法
        */
        List<String> result1 = stringList.stream().distinct()
                .collect(Collectors.toList());
        System.out.println("去重:" + result1);

        List<User> userList = new ArrayList<>();
        userList.add(new User("pang"));
        userList.add(new User("pang"));
        List<User> userList1 = userList.stream().distinct()
                .collect(Collectors.toList());
        System.out.println("对象去重" + userList1);

        /**
         * @Description:limit(long maxSize):限制个数,只获取前面maxSize个元素
        */
        List<String> result3 = stringList.stream().limit(2)
                .collect(Collectors.toList());
        System.out.println(result3);// 只输出了两个元素

        /**
         * @Description:skip(long n):获取除前n个元素的其他元素
        */
        List<String> skipList = stringList.stream().skip(2)
                .collect(Collectors.toList());
        System.out.println(skipList);

        /**
         * @Description:map(表达式条件):对流中的所有元素做统一处理
        */
        List<String> mapList = stringList.stream().map(str -> str.concat("_ROLE"))
                .collect(Collectors.toList());
        System.out.println(mapList);

        /**
         * @Description:sorted(比较器):对流排序
        */
        List<String> list = Arrays.asList("你好", "世界", "就是");
        List<String> sortList = list.stream().sorted(Collections.reverseOrder(Collator.getInstance(Locale.CHINA)))
                .collect(Collectors.toList());
        System.out.println(sortList);
    }


}

终止操作符

流方法作用
forEach循环集合元素,没有返回值,不改变原来的集合元素
collect将流转化为其他形式
/**
 * @Description:循环,没有返回值,不改变原来的集合元素
*/
stringList.stream().forEach(s -> System.out.println(s.concat("_ADMIN")));
System.out.println(stringList);

/**
 * @Description:collect 将流转换成为其他形式:
 *          Collectors.toMap(k -> k, v -> v, (oldValue, newValue) -> newValue)
 *          v -> v(第一个参数确定key),v -> "" (第二个参数确定value),后面指定key重复后的选择性,覆盖原来旧的
*/
Map<String, String> map = stringList.stream().collect(Collectors.toMap(v -> v, v -> "nihao", (oldValue, newValue) -> newValue));
System.out.println(map);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值