package com.zx;

 import java.util.*;
import java.util.function.*;
import java.util.stream.Collectors;
import java.util.stream.Stream; /**
* lambdaTest类
*
* @author ning
* @create 2018-06-11 17:19
**/
public class LambdaTest { public static void main(String[] args){ new Thread(() -> {System.out.println("lambda创建一个新线程");}).start(); List<String> listStr = Arrays.asList("Java","C","C++","C#","Python","PHP");
StringBuilder sb = new StringBuilder();
listStr.forEach(n -> System.out.println(sb.append(",").append(n))); /**
* 用特殊符号拼接
* */
String collect = listStr.stream().collect(Collectors.joining(","));
System.out.println(collect);
String collect1 = listStr.stream().collect(Collectors.joining("#"));
System.out.println(collect1); listStr.sort((a,b) -> a.compareTo(b));
System.out.println(listStr); String abc = "hello";
Consumer<String> consumer = (a) -> {}; Function<String,String> function = x -> x.toUpperCase();
String zsdf = function.apply("zsdf");
System.out.println(zsdf); /**
* 静态方法引用
* 语法格式- - 类目::staticMethod
*/
//只有一个输出
Supplier<String> supplier = LambdaTest::put;
System.out.println(supplier.get());
//只有一个输入
Consumer<String> c1 = LambdaTest::consume;
c1.accept("张三");
//一个输入,一个输出
Function<String, String> f1 = LambdaTest::convertUp;
System.out.println(f1.apply("a"));
//两个输入,一个输出
BiFunction<String,String,Integer> biFunction = LambdaTest::getLength;
System.out.println(biFunction.apply("abc","123"));
////////////////////// 方法的引用 - start ////////////////////////
/**
* 实例方法引用
* 语法格式- - 实例::实例Method
*/
Supplier<String> s1 = new LambdaTest()::put1;
System.out.println(s1.get());
LambdaTest lt = new LambdaTest();
Consumer<String> c2 = lt::consume1;
c2.accept("王五"); /**
* 对象方法引用
* 定义:抽象方法的第一个参数类型【最好是自定义的类型】刚好是实例方法的类型【言外之意,必需有参数】,抽象方法剩余的参数恰好可以当作实例方法的参数。
* 如果函数式接口的实现能用上面说的实例方法调用来实现的话,那么就可以使用对象方法引用
* 语法格式- - 类名::实例Method
*/
Consumer<Too> c3 = (Too too) -> new Too().too();
c3.accept(new Too());
Consumer<Too> c4 = Too::too;
c4.accept(new Too());
BiConsumer<Too,String> c5 = (too, ac) -> new Too().too1(ac);
c5.accept(new Too(),"宁大人");
//两个输入,一个输出
BiFunction<Too, String, Integer> biFunction1 = (p,s) -> new Too().too2(s);
BiFunction<Too, String, Integer> biFunction2 = Too::too2;
System.out.println(biFunction1.apply(new Too(),"123"));
System.out.println(biFunction2.apply(new Too(),"123"));
/**
* 构造方法的引用
* 定义:如果函数式接口的实现恰好可以通过调用一个类的构造方法来实现,那么就可以使用构造方法引用
* 语法格式- - 类名::new
*/
Supplier<Person> s2 = () -> new Person();
s2.get();
Supplier<Person> s3 = Person::new;
s3.get();
//含有无参构造函数都可以使用Supplier,如下:
Supplier<List> s4 = ArrayList::new;
Supplier<Thread> s5 = Thread::new;
Supplier<Set> s6 = HashSet::new;
Supplier<String> s7 = String::new; //含有有参构造函数的
Consumer<Integer> c6 = Account::new;
c6.accept(123); Function<String, Integer> f2 = Integer::new;
System.out.println(f2.apply("456")); ////////////////////// 方法的引用 - end //////////////////////// ////////////////////// Stream API - start //////////////////////// /***
* stream的创建
* */
//1、数组
String[] arr = {"1","b","c"};
Integer[] arr1 = {1,2,3,4};
Stream<String> stream1 = Stream.of(arr);
Stream<Integer> stream2 = Stream.of(arr1);
//2、集合
List<String> list1 = Arrays.asList("1","2","3");
Stream<String> stream = list1.stream(); /**
* 中间操作
* */
Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).forEach(System.out::println);
int max = Arrays.asList(1, 2, 3, 4, 5, 6).stream().max((a1,b1) -> a1-b1).get();
System.out.println(max);
Integer min = Arrays.asList(1, 2, 3, 4, 5, 6).stream().min((a1, b1) -> a1 - b1).get();
System.out.println(min);
//求集合元素数量
long count = Arrays.asList(1, 2, 3, 4, 5).stream().count();
System.out.println(count);
//截取
Arrays.asList(1, 2, 3, 4, 5, 6).stream().limit(3).forEach(System.out::println);
//求平均值
double asDouble = Arrays.asList(1, 2, 3, 4, 5, 6).stream().mapToInt(x -> x).average().getAsDouble();
System.out.println(asDouble);
//查找任意匹配的元素
Optional<Integer> first = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).findAny();
System.out.println(first.get());
//查找第一个匹配的元素
Optional<Integer> first1 = Arrays.asList(1, 2, 3, 4, 5, 6).stream().filter(x -> x % 2 == 0).sorted((a,b) -> b -a).findFirst();
System.out.println(first1.get());
//从1-50里面的所有偶数找出来,放到一个list中
List<Integer> list2 = Stream.iterate(1, x -> x + 1).limit(50).filter(n -> n % 2 == 0).collect(Collectors.toList());
list2.forEach(System.out::println);
//集合元素去重
Arrays.asList(1,2,3,4,5,4,3,5,6,7,3,8).stream().distinct().forEach(System.out::println);
//将流转成set集合
Set<Integer> collect2 = Arrays.asList(1, 2, 3, 4, 5, 4, 3, 5, 6, 7, 3, 8).stream().collect(Collectors.toSet());
System.out.println(collect2);
//从1-50里面的所有偶数找出来,忽略前10个,放到一个list中
List<Integer> list3 = Stream.iterate(1, x -> x + 1).limit(50).filter(n -> n % 2 == 0).skip(10).collect(Collectors.toList());
System.out.println(list3);
//类似分页效果, skip(10).limit(10) :跳过前10条,相当于查询第二页,每页10条
List<Integer> list4 = Stream.iterate(1, x -> x + 1).limit(50).sorted((a,b) -> b -a).skip(10).limit(10).collect(Collectors.toList());
System.out.println(list4);
////////////////////// Stream API - end ////////////////////////
} String put1(){
return "world";
} static String put(){
return "hello";
} void consume1(String string){
System.out.println(string + ", 哈哈哈");
}
static void consume(String string){
System.out.println(string + ", 哈哈哈");
}
static String convertUp(String a){
return a.toUpperCase();
}
static Integer getLength(String a, String b){
return a.length() + b.length();
}
} class Account{
public Account(int age){
System.out.println(age);
}
} class Person{
public Person(){
System.out.println("person 构造方法调用了");
}
} class Too{
public void too(){
System.out.println("invoke.............");
} public void too1(String str){
System.out.println(str + ",invoke.............");
} public Integer too2(String p) {
return 1;
}
}

Lambda学习---方法引用和其他基本应用的更多相关文章

  1. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  2. [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

  3. 函数式接口 & lambda表达式 & 方法引用

    拉呱: 终于,学习jdk8的新特性了,初体验带给我的感觉真爽,代码精简的不行,可读性也很好,而且,spring5也是把jdk8的融入到血液里,总之一句话吧,说的打趣一点,学的时候自己难受,学完了写出来 ...

  4. Java8特性之Lambda、方法引用以及Stream流

    Java 8 中的 Streams API 详解:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/ Java笔记——Jav ...

  5. lambda与方法引用

    哈喽,大家好,我是指北君. 虽然目前Java最新版本都已经到16了,但是绝大部分公司目前用的Java版本都是8,想当初Java8问世后,其Lambda表达式与方法引用可是最亮眼的新特性,目前,这两个特 ...

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

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

  7. Java8特性之Lambda、方法引用和Streams

    这里涉及三个重要特性: Lambda 方法引用 Streams ① Lambda 最早了解Lambda是在C#中,而从Java8开始,Lambda也成为了新的特性,而这个新的特性的目的,就是为了消除单 ...

  8. java8之lambda表达式&方法引用(一)

    本文将简单的介绍一下Lambda表达式和方法引用,这也是Java8的重要更新,Lambda表达式和方法引用最主要的功能是为流(专门负责迭代数据的集合)服务. 什么是lambda表达式 可以把lambd ...

  9. 黑马Lambda表达式学习 Stream流 函数式接口 Lambda表达式 方法引用

随机推荐

  1. Scala包的使用

    package big.data.analyse.scala.classes /** * Created by zhen on 2018/9/15. */ object Packages { def ...

  2. windows7环境下使用pip安装MySQLdb for python3.7

    1.首先,需要确定你已经安装了pip.在Python2.7的安装包中,easy_install.py和pip都是默认安装的.可以在Python的安装目录先确认,如果\Python37\Scripts里 ...

  3. 获取 MySQL 崩溃时的 core file

    对于一般进程,要让进程崩溃时能生成 core file 用于调试,只需要设置 rlimit 的 core file size > 0 即可.比如,用在 ulimit -c unlimited 时 ...

  4. replace 用法

    orcl中replace()用法: replace:(字符串 | 列):进行替换: 将bqh1表中name列带“小”的字改成“大”: select * from bqh1select a.*,repl ...

  5. C# 利用VS自带的WSDL工具生成WebService服务类(转载)

    WebService有两种使用方式,一种是直接通过添加服务引用,另一种则是通过WSDL生成. 添加服务引用大家基本都用过,这里就不讲解了. 那么,既然有直接引用的方式,为什么还要通过WSDL生成呢? ...

  6. DevExpress07、DataNavigator、 ControlNavigator

    https://documentation.devexpress.com/WindowsForms/DevExpress.XtraEditors.DataNavigator.class 1.DataN ...

  7. 9.算法之顺序、二分、hash查找

    一.查找/搜索 - 我们现在把注意力转向计算中经常出现的一些问题,即搜索或查找的问题.搜索是在元素集合中查找特定元素的算法过程.搜索通常对于元素是否存在返回 True 或 False.有时它可能返回元 ...

  8. Android学习之——自己搭建Http框架(1)

    一.前言         近期学习http框架.         眼下写的这个框架临时仅仅适用于学习之用,实际用于项目之中还须要不断的优化.         要从server或者网络获取数据.显示到U ...

  9. PhpStorm破解版及使用教程

    本文引自网络,仅供本人学习使用之用,感谢网友的分享 PhpStorm  PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提 ...

  10. kubernetes label 标签使用

    查看node的标签kubectl get node --show-labels 删除标签kubectl label nodes node5 storagenode- 设置标签kubectl label ...