1. ackage com.expgiga.Java8;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.List;
  6. import java.util.function.Consumer;
  7. import java.util.function.Function;
  8. import java.util.function.Predicate;
  9. import java.util.function.Supplier;
  10.  
  11. /**
  12. * Java8内置的四大核心函数式接口
  13. *
  14. * 1.Consumer<T>:消费型接口
  15. * void accept(T t);
  16. * 2.Supplier<T>:供给型接口
  17. * T get();
  18. * 3.Function<T, R>:函数型接口
  19. * R apply(T t);
  20. * 4.Predicate<T>:断言型接口
  21. * boolean test(T t);
  22. */
  23. public class TestLambda3 {
  24. public static void main(String[] args) {
  25. //Consumer<T>消费型接口
  26. happy(10000, (m) -> System.out.println("Play Game!: " + m + " yuan"));
  27.  
  28. //Supplier<T>
  29. List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
  30. for (Integer num : numList) {
  31. System.out.println(num);
  32. }
  33.  
  34. //Function<T, R>函数型接口
  35. String newStr = strHandler("\t\t\t 你牛逼 ", (str) -> str.trim());
  36. System.out.println(newStr);
  37.  
  38. String subStr = strHandler("我也牛逼,大家都牛逼", (str) -> str.substring(2, 5));
  39. System.out.println(subStr);
  40.  
  41. //Predicate<T> 断言型接口
  42. List<String> list = Arrays.asList("Hello", "you", "me", "Java", "Scala");
  43. List<String> newlist = filterStr(list, (s) -> s.length() > 3);
  44. for (String str : newlist) {
  45. System.out.println(str);
  46. }
  47. }
  48.  
  49. private static void happy(double money, Consumer<Double> con) {
  50. con.accept(money);
  51. }
  52.  
  53. //需求:产生一些整数,并放入集合中
  54. private static List<Integer> getNumList(int num, Supplier<Integer> sup) {
  55. List<Integer> list = new ArrayList<>();
  56.  
  57. for (int i = 0; i < num; i++) {
  58. Integer n = sup.get();
  59. list.add(n);
  60. }
  61.  
  62. return list;
  63. }
  64.  
  65. //需求:用于处理字符串
  66. private static String strHandler(String str, Function<String, String> fun) {
  67. return fun.apply(str);
  68. }
  69.  
  70. //需求:将满足条件的字符串放入集合中去
  71. private static List<String> filterStr(List<String> list, Predicate<String> predicate) {
  72. List<String> strList = new ArrayList<>();
  73.  
  74. for (String str : list) {
  75. if (predicate.test(str)) {
  76. strList.add(str);
  77. }
  78. }
  79.  
  80. return strList;
  81. }
  82.  
  83. }

  

java8的正确使用姿势的更多相关文章

  1. java8 Optional正确使用姿势

    Java 8 如何正确使用 Optional import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; ...

  2. xpath轴的正确使用姿势

    网上看了许多关于轴的介绍,只介绍了语法,而没有明说具体实际中该怎么使用,百思不得其解. 背景--python中使用xpath:  ----------------------------------- ...

  3. 高版本jquery尤其是1.10.2的版本设置input radio设置值的最正确的姿势。

    $("input:radio[name="analyshowtype"]").attr("checked",false); $(" ...

  4. NSnotificationCenter 正确使用姿势, removeObject 探索

    最近在做平板的过程中,发现了一些很不规范的代码.偶然修复支付bug的时候,看到其他项目代码,使用通知的地方没有移除,我以为我这个模块的支付闪退是因为他通知没有移除的缘故.而在debug和看了具体的代码 ...

  5. 微信H5中静默登录及非静默登录的正确使用姿势

    在微信中打开网页且需要调用微信登录接口时,微信官方给我们提供了两种登录调用方式:静默登录和非静默登录:但是官方文档中却没有说明在何种情况下使用静默登录,何种情况下使用非静默登录,所以在这里,我想将之前 ...

  6. Java日志正确使用姿势

    前言 关于日志,在大家的印象中都是比较简单的,只须引入了相关依赖包,剩下的事情就是在项目中“尽情”的打印我们需要的信息了.但是往往越简单的东西越容易让我们忽视,从而导致一些不该有的bug发生,作为一名 ...

  7. MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集

    MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...

  8. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  9. 玩转java多线程(wait和notifyAll的正确使用姿势)

    转载请标明博客的地址 本人博客和github账号,如果对你有帮助请在本人github项目AioSocket上点个star,激励作者对社区贡献 个人博客:https://www.cnblogs.com/ ...

随机推荐

  1. 深入理解dijkstra+堆优化

    深入理解dijkstra+堆优化 其实就这几种代码几种结构,记住了完全就可以举一反三,所以多记多练多优化多思考. Dijkstra   对于一个有向图或无向图,所有边权为正(边用邻接矩阵的形式给出), ...

  2. 不是有效的win32应用程序

    问题描述: 用vs2012编写的程序在xp下运行提示"不是有效的win32应用程序", 改成静态编译还是会提示上面的错误 解决办法: 原来常规里面的平台工具集的设置如上,更改为下面 ...

  3. ubuntu安装完成后需要做的事情

    1.删除libreoffice libreoffice虽然是开源的,但是Java写出来的office执行效率实在不敢恭维,装完系统后果断删掉 [html] view plain copy sudo a ...

  4. ztree 数组和树结构互转算法

    //树转化为数组transformToArrayFormat: function (setting, nodes) { if (!nodes) return []; var childKey = se ...

  5. 火狐foxyproxy + burp

    下载 火狐foxyproxy 和 burp 两个代理ip端口填写一致 如果对于公司有正向代理服务器,则需要配置burp的上游代理 对于IE浏览器的代理是windows操作系统的全局代理,在ie配置代理 ...

  6. CSS Sprites技术原理和使用

      在分析各个网站的CSS时,我们经常可以看到一些网站有很多的元素共享了一张背景图片,而这张背景图片包含了所有这些元素需要的背景,这种技术就叫做CSS Sprites. 淘宝的css sprites ...

  7. linux中errno及perror的应用

    1 perror 定义在头文件<stdlib.h>中 void perror(const char *s);函数说明 perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 ...

  8. KMP算法及实现

    #include<cstdio> #include<cmath> #include<cstring> #include<iostream> #inclu ...

  9. 12-python基础—python3中的reduce()

    在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,需要通过引入 functools 模块来调用 reduce() 函数: from ...

  10. DDCTF 北京地铁

    这周打了ddctf,被打成了dd 北京地铁题目给了一张北京地铁图,提示如下:Color Threshold 提示:AES ECB密钥为小写字母提示2:密钥不足位用\0补全提示3:不要光记得隐写不看图片 ...