我正参加2016CSDN博客之星的比赛 希望您能投下宝贵的一票,点击进入投票

新语法

方法引用(Method references)

我们来看个接口和一个方法

public class TestMain {

    interface A{
String a(int a,int b);
} static String hello(int a,int b){
return "";
};
}

假设我们这里要实现A接口

一般是直接内部类 或者新建一个类去实现

        //我们平常的实现方法
A a = new A() { @Override
public String a(int a, int b) { return null;
}
};

那我们来看看用”方法引用”的方式

A a2 = TestMain::hello;

是不是很简洁?

来我们看看这种语法的规则

AAA::BBB

AAA指代某个类

BBB指代某个方法

BBB中的方法必须和你实现的接口回调的参数返回值一致

就拿我们本例中的案例可以A接口中抽象方法 String a(int a,int b);

我们可以看到这个返回值是—String 参数为—-int—-int

然后再看看我们TestMain类下的String hello(int a,int b)方法

返回值是—-String 参数是—int—int

当使用 ‘方法引用’ 时候我自动传入参数

再来看个案例

List<String> data = Arrays.asList("2","1","4");
//forEach后面会解释 大家主要看一下他的接口实现
data.forEach(new Consumer<String>() { @Override
public void accept(String t) {
System.out.println(t); }
});

再看看用新语法怎么实现

List<String> data = Arrays.asList("2","1","4");
//forEach后面会解释 大家主要看一下他的接口实现
data.forEach(System.out::printf);

上面两个效果是一样的 都是输出 2 1 4

System.out 是 java.lang.System.out中的一个类

printf 是System.out中的一个方法

我们来看下这个printf方法

    public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}

可以看到传入值一个字符串 返回值为void

我们再来看下forEach中的匿名内部类

data.forEach(new Consumer<String>() {

            @Override
public void accept(String t) { }
});

传入的是一个String 返回的是void 所以正好可以使用System.out.println

Lambda语法

同样的看一个接口和他的实现方法

接口:

public class TestMain {
interface A{
String a(int a,int b);
}
}

来看看吧我们实现的方法

        //我们平常的实现方法
A a = new A() { @Override
public String a(int a, int b) { return null;
}
};

Lambda语法实现

    //直接返回字一个字符串
A a2 = (aa,b)->{return "";};
//计算aa+b的数值 然后转化为字符串返回
A a3 = (int aa,int b)->{String s=(aa+b)+"";return s;};
//相当于直接返回
A a4 = (int aa,int b)-> "我不想计算aa+b的值"; //如果A接口中a方法没有参数也没有返回值假如抽象方法为void a();
A a2 = ()->{};

Lambda语法

1. (aa,bb)->”“;

aa 抽象方法的第一个参数 自动会按顺序赋值

bb抽象方法的第二个参数 自动会按顺序赋值

“” 抽象方法的返回值 相当于 return “”

2. (int aa,float bb)->””

aa 抽象方法的第一个参数并且类型为int 自动会按顺序赋值

bb抽象方法的第二个参数并且类型为float自动会按顺序赋值

“” 抽象方法的返回值 相当于 return “”

这里的类型可以根据你的抽象方法确定

3. (aa,bb)->{

System.out.println(“嘿嘿传入的数值a = “+aa);

return “”;

}

aa 抽象方法的第一个参数 自动会按顺序赋值

bb抽象方法的第二个参数 自动会按顺序赋值

{} 方法体可以在里面执行语句最后再返回

4. (int aa,int bb)->{

System.out.println(“嘿嘿传入的数值a = “+aa);

return “”;

}

和”3”一样 只不过指定了参数

5. ()->{ }

抽象接口没有参数返回值为void

案例1:

原版:

FileFilter java = new FileFilter() {

            @Override
public boolean accept(File pathname) { return false;
}
};

lambda

    FileFilter java2 = (file)-> true;

在android中的一个案例:

   ImageView iv  =(ImageView)findViewById(R.id.iv);
iv.setOnClickListener(view -> {
Toast.makeText(this,"你的内容",Toast.LENGTH_SHORT).show();
Toast.makeText(this,"你的内容",Toast.LENGTH_SHORT).show();
});

Lambda语法在AndroidStudio中报错

可以点击查看原文

1.首先先项目根目录下的build.gradle中加入(注意加黑字)as2.0以后版本用3.4

classpath 'me.tatarka:gradle-retrolambda:3.2.0'

2.然后再module目录下的build.gradle中使用插件(放在第一行就行),加入

apply plugin: 'me.tatarka.retrolambda'

3.jmodule目录下的build.gradle中android语段中加入

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

Stream API

参考文献1

此Api位于

java.util.stream.Stream

是以前集合list ArraysList等升级版 更高效的操作这里只教怎么用 具体大家可以看上面的连接

  1. 集合转为stream

    List<String> data = Arrays.asList("5","4","0","1");
    Stream<String> stream = data.stream();
  2. stream变为集合
    List<String> data = Arrays.asList("5","4","0","1");
Stream<String> stream = data.stream();
List<Object> asList = Arrays.asList(stream.toArray());
    List<String> data = Arrays.asList("5","4","0","1");
Stream<String> stream = data.stream();
stream.collect(Collectors.toList());

关于collect 可以看下这篇文章

collect介绍

Java 8新特性:新语法方法引用和Lambda表达式及全新的Stream API的更多相关文章

  1. Effective Java 第三版——43.方法引用优于lambda表达式

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  2. Java8 新特性----函数式接口,以及和Lambda表达式的关系

    这里来讲解一下Java8 新特性中的函数式接口, 以及和Lambda 表达式的关系.看到过很多不少介绍Java8特性的文章,都会介绍到函数式接口和lambda表达式,但是都是分别介绍,没有将两者的关系 ...

  3. Java函数式编程:一、函数式接口,lambda表达式和方法引用

    Java函数式编程 什么是函数式编程 通过整合现有代码来产生新的功能,而不是从零开始编写所有内容,由此我们会得到更加可靠的代码,并获得更高的效率 我们可以这样理解:面向对象编程抽象数据,函数式编程抽象 ...

  4. C# 7.0 新特性4: 返回引用

    本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  5. 乐字节-Java8新特性-接口默认方法

    总概 JAVA8 已经发布很久,而且毫无疑问,java8是自java5(2004年发布)之后的最重要的版本.其中包括语言.编译器.库.工具和JVM等诸多方面的新特性. Java8 新特性列表如下: 接 ...

  6. C#7.0新特性和语法糖详解

    转自IT之家网--DotNet码农:https://www.ithome.com/html/win10/305148.htm 伴随Visual Studio 2017的发布,C#7.0开始正式走上工作 ...

  7. Java8新特性系列-默认方法

    Java8 Interface Default and Static Methods 原文连接:Java8新特性系列-默认方法 – 微爱博客 在 Java 8 之前,接口只能有公共抽象方法. 如果不强 ...

  8. 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient

    [源码下载] 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient 作者:webabcd 介绍重新想象 Windows 8.1 Store ...

  9. Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. ...

随机推荐

  1. 框架学习之Spring(一IOC)----HelloWrod

    一.概述 Spring是一个开源框架,它的核心是控制反转(IOC)和面向切面(AOP).简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架. EE 开发分 ...

  2. Java面试题—初级(4)

    31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,"xyz" ...

  3. scrapy安装教程

    Step 1 •安装Python2.7(32位版本) –https://www.python.org/downloads/release/python-279/ Setp 2 •打开"运行& ...

  4. jacascript 原生选项卡插件

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 在布局的时候,想到了很多以前看到过的案例,再次熟悉一下: a链接之间的竖线:可以用a链接的border-r ...

  5. 使用NPOI-创建Excel

    这里简单的使用一下NPOI ,什么是NPOI? 既然你已经在需要使用了,就一定知道NPOI是干什么用的了. 开始正题吧. 我用控制台程序来给大家演示一下: 一.创建控制台程序 自行脑补 二.添加NPO ...

  6. 学习React系列(四)——受控组件与非受控组件

    受控组件:通过组件的状态与属性的改变来控制组件 不可控组件:直接通过底层的dom来控制组件(具体来说就是通过绑定再底层dom上的方法来实现的,比如说ref,onChange) 受控组件 functio ...

  7. 对于手机APP偷窥个人隐私,你怎么看

    经过进两周的持续发酵,Facebook5000万用户数据泄露事件,已让其处在舆论的风尖浪口.对于手机APP泄漏用户个人隐私问题,再次受到人们的关注.对于这个问题,你会怎么看? 隐私,即不愿公开的个人信 ...

  8. seacms6.5 注入漏洞1

    ---恢复内容开始--- 需要开启/data/admin/isapi.txt   ,当里面的数值为1时,就可以报错注入 存在漏洞的页面:zyapi.php function cj() { global ...

  9. NKOJ4191 Trie树

    问题描述 字母(Trie)树是一个表示一个字符串集合中所有字符串的前缀的数据结构,其有如下特征: 1.树的每一条边表示字母表中的一个字母  2.树根表示一个空的前缀  3.树上所有其他的节点都表示一个 ...

  10. [USACO13OPEN]重力异常

    题目描述 船长正在拯救她的船员,Beefalo 博士. 和所有伟大的冒险故事一样,这个故事也是发生在一个2D平面上的.囧 这个平面是M*N的格子组成的网格,代表着船长的世界的一个侧视图. 有些格子是空 ...