Java8函数式编程

举报
chnliyc 发表于 2019/01/29 16:29:20 2019/01/29
【摘要】 Java8函数式编程一、Java中重要的函数接口Predicate: 接受一个对象,作判断,返回一个布尔值Consumer: 接受一个对象,消费输入,输出一个值Function: 接受一个对象,获得对象的名字Supplier: 工厂方法UnaryOperator: 接受一个对象,计算逻辑非(!)BinaryOperator: 接受两个数,求两个数的运算结果二、常用的流操作【惰性求值(返回值是...

Java8函数式编程

一、Java中重要的函数接口

  • Predicate: 接受一个对象,作判断,返回一个布尔值

  • Consumer: 接受一个对象,消费输入,输出一个值

  • Function: 接受一个对象,获得对象的名字

  • Supplier: 工厂方法

  • UnaryOperator: 接受一个对象,计算逻辑非(!)

  • BinaryOperator: 接受两个数,求两个数的运算结果

二、常用的流操作【惰性求值(返回值是Stream),及早求值(返回值是另一个值或为空)】

  • collect(toList()): 由Stream 里的值生成一个列表

     List<String> collected = Stream.of("a", "b", "c")
                                      .collect(Collectors.toList());
  • map: 将Stream里一种类型的值转换成另外一种类型,即用一个新的值代替Stream中的值

     List<String> collected = Stream.of("a", "b", "hello")
                                      .map(string -> string.toUpperCase())
                                     .collect(toList());
  • flatMap: 可用Stream替换值,然后将多个Stream连接成一个Stream,生成一个新的Stream对象

     List<Integer> together = Stream.of(asList(1, 2), asList(3, 4))
                                     .flatMap(numbers -> numbers.stream())
                                     .collect(toList());
  • filter: 遍历数据并检查其中的元素,保留Stream中符合条件的的元素,而过滤掉其他不符合条件的

     List<String> beginningWithNumbers = Stream.of("a", "1abc", "abc1")
                                                 .filter(value -> isDigit(value.charAt(0)))
                                                 .collect(toList());
  • max和min: 求最大值和最小值,返回Optional对象

     List<Track> tracks = asList(new Track("Bakai", 524),new Track("Violets for Your Furs", 378), new Track("Time Was", 451));
     Track shortestTrack = tracks.stream()
                                 .min(Comparator.comparing(track -> track.getLength()))
                                 .get();
  • get: 可以取出Optional对象中的值

  • reduce: 实现从一组值中生成一个值

     求和:int count = Stream.of(1, 2, 3)
                             .reduce(0, (acc, element) -> acc + element);


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。