1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.function.Consumer;
  5. import java.util.function.Function;
  6. import java.util.function.Predicate;
  7. import java.util.function.Supplier;
  8.  
  9. import org.junit.Test;
  10.  
  11. /*
  12. * Java8 内置的四大核心函数式接口
  13. *
  14. * Consumer<T> : 消费型接口
  15. * void accept(T t);
  16. *
  17. * Supplier<T> : 供给型接口
  18. * T get();
  19. *
  20. * Function<T, R> : 函数型接口
  21. * R apply(T t);
  22. *
  23. * Predicate<T> : 断言型接口
  24. * boolean test(T t);
  25. *
  26. */
  27. public class TestLambda3 {
  28.  
  29. //Predicate<T> 断言型接口:
  30. @Test
  31. public void test4(){
  32. List<String> list = Arrays.asList("Hello", "atguigu", "Lambda", "www", "ok");
  33. List<String> strList = filterStr(list, (s) -> s.length() > 3);
  34.  
  35. for (String str : strList) {
  36. System.out.println(str);
  37. }
  38. }
  39.  
  40. //需求:将满足条件的字符串,放入集合中
  41. public List<String> filterStr(List<String> list, Predicate<String> pre){
  42. List<String> strList = new ArrayList<>();
  43.  
  44. for (String str : list) {
  45. if(pre.test(str)){
  46. strList.add(str);
  47. }
  48. }
  49.  
  50. return strList;
  51. }
  52.  
  53. //Function<T, R> 函数型接口:
  54. @Test
  55. public void test3(){
  56. String newStr = strHandler("\t\t\t 我大尚硅谷威武 ", (str) -> str.trim());
  57. System.out.println(newStr);
  58.  
  59. String subStr = strHandler("我大尚硅谷威武", (str) -> str.substring(2, 5));
  60. System.out.println(subStr);
  61. }
  62.  
  63. //需求:用于处理字符串
  64. public String strHandler(String str, Function<String, String> fun){
  65. return fun.apply(str);
  66. }
  67.  
  68. //Supplier<T> 供给型接口 :
  69. @Test
  70. public void test2(){
  71. List<Integer> numList = getNumList(10, () -> (int)(Math.random() * 100));
  72.  
  73. for (Integer num : numList) {
  74. System.out.println(num);
  75. }
  76. }
  77.  
  78. //需求:产生指定个数的整数,并放入集合中
  79. public List<Integer> getNumList(int num, Supplier<Integer> sup){
  80. List<Integer> list = new ArrayList<>();
  81.  
  82. for (int i = 0; i < num; i++) {
  83. Integer n = sup.get();
  84. list.add(n);
  85. }
  86.  
  87. return list;
  88. }
  89.  
  90. //Consumer<T> 消费型接口 :
  91. @Test
  92. public void test1(){
  93. happy(10000, (m) -> System.out.println("你们刚哥喜欢大宝剑,每次消费:" + m + "元"));
  94. }
  95.  
  96. public void happy(double money, Consumer<Double> con){
  97. con.accept(money);
  98. }
  99. }

java8 - 3的更多相关文章

  1. Java8实战分享

    虽然很多人已经使用了JDK8,看到不少代码,貌似大家对于Java语言or SDK的使用看起来还是停留在7甚至6. Java8在流式 or 链式处理,并发 or 并行方面增强了很多,函数式的风格使代码可 ...

  2. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  3. Android Studio2.1.2 Java8环境下引用Java Library编译出错

    转载请注明出处:http://www.cnblogs.com/LT5505/p/5685242.html 问题:在Android Studio2.1.2+Java8的环境下,引用Java Librar ...

  4. Java笔记——Java8特性之Lambda、方法引用和Streams

    Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...

  5. 关于Java8函数式编程你需要了解的几点

    函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...

  6. Java8并发教程:Threads和Executors

    来之:ImportNew 欢迎阅读我的Java8并发教程的第一部分.这份指南将会以简单易懂的代码示例来教给你如何在Java8中进行并发编程.这是一系列教程中的第一部分.在接下来的15分钟,你将会学会如 ...

  7. java8 学习系列--NIO学习笔记

    近期有点时间,决定学习下java8相关的内容: 当然了不止java8中新增的功能点,整个JDK都需要自己研究的,不过这是个漫长的过程吧,以自己的惰性来看: 不过开发中不是有时候讲究模块化开发么,那么我 ...

  8. Java8函数式编程

    在Java8的 java.util.function中包含以下几个接口 1.Function,先上源码 /* * Copyright (c) 2010, 2013, Oracle and/or its ...

  9. Java8闭包

    闭包在很多语言中都存在,例如C++,C#.闭包允许我们创建函数指针,并把它们作为参数传递,Java编程语言提供了接口的概念,接口中可以定义抽象方法,接口定义了API,并希望用户或者供应商来实现这些方法 ...

  10. Java8新特性——接口的默认方法和类方法

    Java8新增了接口的默认方法和类方法: 以前,接口里的方法要求全部是抽象方法,java8以后允许在接口里定义默认方法和类方法: 不同的是: 默认方法可以通过实现接口的类实例化的对象来调用,而类方法只 ...

随机推荐

  1. python模块module package

    python模块module   package module package 常用模块 模块与包的区别 模块分为内置模块.第三方模块,自定义模块 程序会先从内置到第三方再到当前工作目录下去找你导入的 ...

  2. 科学计算三维可视化---Traits属性的监听

    Traits属性的监听 HasTraits对象所有Traits属性都自动支持监听功能,当每个Traits属性发生变化时,HasTraits对象会通知监听此属性的函数 两种监听模式 静态监听 动态监听 ...

  3. Java获取精确到毫秒的时间戳

    import java.util.Date; public class Timestamp { /** 获取精确到毫秒的时间戳 * @param date * @return **/ public s ...

  4. 判断android是否是debug

    1.使用BuildConfig.DEBUG,这个在住modul里面是有效的,但是在有依赖库里面使用就会一直返回false,可以通过下面的方法解决:在library的build.gradle中添加以下代 ...

  5. SpringBoot 线程池配置 实现AsyncConfigurer接口方法

      目的是:  通过实现AsyncConfigurer自定义线程池,包含异常处理  实现AsyncConfigurer接口对异常线程池更加细粒度的控制 *a) 创建线程自己的线程池  b) 对void ...

  6. 为什么我要用 Node.js? 案例逐一介绍

    介绍 JavaScript 高涨的人气带来了很多变化,以至于如今使用其进行网络开发的形式也变得截然不同了.就如同在浏览器中一样,现在我们也可以在服务器上运行 JavaScript ,从前端跨越到后端, ...

  7. CALayer的上动画的暂停和恢复

    CHENYILONG Blog CALayer上动画的暂停和恢复 #pragma mark 暂停CALayer的动画-(void)pauseLayer:(CALayer*)layer{CFTimeIn ...

  8. STL-pair

    每个pair 可以存储两个值.这两种值无限制. 定义 pair<int,char> p; pair<string,int> p; pair<int,int> p; ...

  9. Python Dict用法

    Operation Result len(a) the number of items in a 得到字典中元素的个数 a[k] the item of a with key k 取得键K所对应的值 ...

  10. 动态SQL中变量赋值

    在动态SQL语句中进行变量的值绑定比较麻烦,这儿做个记录 declare @COUNT int,@sql nvarchar(max) set @sql = 'select @COUNT = count ...