1.Lambda 表达式:

引导:http://www.cnblogs.com/yulinfeng/p/8452379.html

DEMO1:

          List<String> names1 = new ArrayList<String>();
names1.add("Google ");
names1.add("Runoob ");
names1.add("Taobao ");
names1.add("Baidu ");
names1.add("Sina "); List<String> names2 = new ArrayList<String>();
names2.add("Google ");
names2.add("Runoob ");
names2.add("Taobao ");
names2.add("Baidu ");
names2.add("Sina "); Compare tester = new Compare();
System.out.println("使用 Java 7 语法: "); tester.sortUsingJava7(names1);
System.out.println(names1);
System.out.println("使用 Java 8 语法: "); tester.sortUsingJava8(names2);
System.out.println(names2);
} // 使用 java 7 排序
private void sortUsingJava7(List<String> names){
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareTo(s2);
}
});
} // 使用 java 8 排序
private void sortUsingJava8(List<String> names){
Collections.sort(names, (s1, s2) -> s1.compareTo(s2));
}

DEMO2:

final static String salutation = "Hello! ";

    public static void main(String args[]) {
Declare tester = new Declare(); // 类型声明
MathOperation addition = (int a, int b) -> a + b; // 不用类型声明
MathOperation subtraction = (a, b) -> a - b; // 大括号中的返回语句
MathOperation multiplication = (int a, int b) -> {
return a * b;
}; // 没有大括号及返回语句
MathOperation division = (int a, int b) -> a / b; // System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
// System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
// System.out.println("10 x 5 = " + tester.operate(10, 5,
// multiplication));
// System.out.println("10 / 5 = " + tester.operate(10, 5, division)); // 不用括号
// GreetingService greetService1 = message ->
// System.out.println("Hello " + message);
//
// // 用括号
// GreetingService greetService2 = (message) ->
// System.out.println("Hello " + message); // greetService1.sayMessage("Runoob");
// greetService2.sayMessage("Google"); // lambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda
// 内部修改定义在域外的局部变量,否则会编译错误。
// GreetingService greetService1 = message ->
// System.out.println(salutation + message);
// greetService1.sayMessage("Runoob"); // 我们也可以直接在 lambda 表达式中访问外层的局部变量:
// final int num = 1;
// Converter<Integer, String> s = (param) -> System.out.println(String.valueOf(param + num));
// s.convert(2); // 输出结果为 3 //lambda 表达式的局部变量可以不用声明为 final,但是必须不可被后面的代码修改(即隐性的具有 final 的语义)
// int num = 1;
// Converter<Integer, String> s = (param) -> System.out.println(String.valueOf(param + num));
// s.convert(2);
//num =2会报错 // 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。
// String first = "";
// Comparator<String> comparator = (first, second) -> Integer.compare(first.length(), second.length()); //编译会出错 } public interface Converter<T1, T2> {
void convert(int i);
} interface MathOperation {
int operation(int a, int b);
} interface GreetingService {
void sayMessage(String message);
} private int operate(int a, int b, MathOperation mathOperation) {
return mathOperation.operation(a, b);
}

 2.Supplier:

public class SupplierTest {
private int age; public SupplierTest() {
System.out.println(age);
} public static void main(String[] args) {
//创建Supplier容器,声明为SupplierTest类型,此时并不会调用对象的构造方法,即不会创建对象
Supplier<SupplierTest> s = SupplierTest::new;
//调用get()方法,此时会调用对象的构造方法,即获得到真正对象
s.get();
//每次get都会调用构造方法,即获取的对象不同
s.get();
} }

3.@FunctionalInterface

    @FunctionalInterface标记在接口上,“函数式接口”是指仅仅只包含一个抽象方法的接口

      (1)该注解只能标记在"有且仅有一个抽象方法"的接口上。

    (2)JDK8接口中的静态方法和默认方法,都不算是抽象方法。

    (3)接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。

              (4)该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错。

4.foreach()

package com.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; public class Other {
public static void main(String[] args) {
testForeach2();
} private static void testForeach2() {
List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
// items.forEach((x)->{System.out.println(x);});
// items.forEach(System.out::println);
// items.stream().filter(s->s.contains("B")).forEach(System.out::println); } private static void testForeach1() {
Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60); items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v)); items.forEach((k,v)->{
System.out.println("Item : " + k + " Count : " + v);
if("E".equals(k)){
System.out.println("Hello E");
}
}); }
}

5.Optional:

package test;

import java.util.Optional;

public class Test1 {
public static void main(String[] args) {
Test1 java8Tester = new Test1();
Integer value1 = null;
Integer value2 = new Integer(10); // Optional.ofNullable - 允许传递为 null 参数
Optional<Integer> a = Optional.ofNullable(value1);
// Optional.of - 如果传递的参数是 null,抛出异常 NullPointerException
Optional<Integer> b = Optional.of(value2);
System.out.println(a.ofNullable(3).orElse(2));
} public Integer sum(Optional<Integer> a, Optional<Integer> b){ // Optional.isPresent - 判断值是否存在
System.out.println("第一个参数值存在: " + a.isPresent());
System.out.println("第二个参数值存在: " + b.isPresent()); // Optional.orElse - 如果值存在,返回它,否则返回默认值
Integer value1 = a.orElse(new Integer(0)); //Optional.get - 获取值,值需要存在
Integer value2 = b.get();
return value1 + value2;
} }

6.Stream().collect

7.双冒号

 8.joining:

9.partitioningBy分区:

10.collectingAndThen:

        <!-- https://mvnrepository.com/artifact/com.google.code.google-collections/google-collect -->
<dependency>
<groupId>com.google.code.google-collections</groupId>
<artifactId>google-collect</artifactId>
<version>snapshot-</version>
</dependency>

11.filter():

java8:(Lambda 表达式,Supplier,@FunctionalInterface,foreach(),Optional,Stream().collect,双冒号,joining,partitioningBy分区,collectingAndThen,filter())的更多相关文章

  1. Java8 Lambda表达式详解手册及实例

    先贩卖一下焦虑,Java8发于2014年3月18日,距离现在已经快6年了,如果你对Java8的新特性还没有应用,甚至还一无所知,那你真得关注公众号"程序新视界",好好系列的学习一下 ...

  2. Java8 Lambda表达式(一)

    目录 一.应用场景引入 优化一:使用策略模式 优化二:使用匿名内部类 优化三:使用Lambda表达式 优化四:使用Stream API 二.Lambda运算符和对应语法 语法格式 Lambda表达式需 ...

  3. java8 Lambda表达式的新手上车指南(1)

    背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...

  4. java8 Lambda表达式的新手上车指南(1)--基础语法和函数式接口

    背景 java9的一再推迟发布,似乎让我们恍然想起离发布java8已经过去了三年之久,java8应该算的上java语言在历代版本中变化最大的一个版本了,最大的新特性应该算得上是增加了lambda表达式 ...

  5. Java8 lambda表达式语法 1

    本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化.本文是该系列的第一篇, ...

  6. JAVA8 lambda表达式权威教程!

    Java 8新特性----Stream流 jdk8是Java 语言开发的一个主要版本,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等等.今天就重点介 ...

  7. Java8 Lambda表达式、函数式接口和方法引用

    目录 Java8 Lambda表达式和函数式接口 Lambda表达式 Lambda的使用 函数式接口FunctionalInterface Java内置四大核心函数式接口 方法引用 构造器引用 Jav ...

  8. java8 Lambda 表达式和函数式接口快速理解

    前言 接上篇文章 java8 新特性 由于上篇过于庞大,使得重点不够清晰,本篇单独拿出 java8 的 Lambda 表达式和函数式接口说明. Lambda 表达式 lambda 表达式其实就是使用了 ...

  9. java8 lambda 表达式详解

    lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...

  10. JAVA8之lambda表达式具体解释,及stream中的lambda使用

    前言: 本人也是学习lambda不久,可能有些地方描写叙述有误,还请大家谅解及指正! lambda表达式具体解释 一.问题 1.什么是lambda表达式? 2.lambda表达式用来干什么的? 3.l ...

随机推荐

  1. unique() sstream

    sstream ss()自动去除空格 例: string a="1 2 3 4 5; getline(cin,a); sstream ss(a); while(ss>>b) { ...

  2. emplace_back() 和 push_back 的区别

    在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...

  3. ubuntu学习笔记-tar 解压缩命令详解(转)

    tar 解压缩命令详解 -c: 建立压缩档案 -x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能 ...

  4. Java发送POST请求,参数为JSON格式,并接收返回JSON数据

    原文地址:https://blog.csdn.net/qq_26975307/article/details/82713725 /** * 发送post请求 * @param url 路径 * @pa ...

  5. python的方法VSjava方法

    java 类方法和实例方法 类方法 用static修饰的方法. 由于类方法是属于整个类的,所以类方法的方法体中不能有与类的对象有关的内容. 即类方法体有如下限制: 1.类方法中不能引用对象变量: 2. ...

  6. Java-Base64Fiend工具类

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; impo ...

  7. SpringBoot中注入RedisTemplate实例异常解决(转)

    最近,在项目开发过程中使用了RedisTemplate,进行单元测试时提示“Field redisTemplate in com.example.demo1.dao.RedisDao required ...

  8. 2 zabbix安装与部署

    官方文档:https://www.zabbix.com/documentation/3.0/manual 中文文档  https://www.zabbix.com/documentation/3.4/ ...

  9. 【环境配置】出现:Microsoft Visual C++ 14.0 is required 的解决方案

    参考blog https://download.csdn.net/download/amoscn/10399046 https://blog.csdn.net/weixin_42057852/arti ...

  10. vim文本编辑器的用法

    vi是一个命令行界面的文本编辑器: vim是vi的改进版: vim不仅有文本编辑:还有文本处理.代码编辑等功能:   1.VIM简介 vim 命令可启动vim编辑器: 一般 vim 文件路径 来使用: ...