我正参加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. hdu1003 Max Sum---最大子段和+记录开始结束点

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1003 题目大意: 求最大子段和,并且输出最大子段和的起始位置和终止位置. 思路: 根据最大子段和基本 ...

  2. break跳出循环的妙用

    while True: temp = input('请输入一个整数:') try: temp = int(temp)#这里如果不是整数的话会引发报错,直接进入 except后面的reason,如果是整 ...

  3. Resource 的 IsSealed 问题

    WFP 的 Generic.xaml ,App.xaml 等中的资源会被调用 Freezable. 在后台对该资源进行修改等操作会被提示.资源为密封对象. 如果,确定需要在后台对资源进行修改. 则需要 ...

  4. [项目推荐] Corcel 让你在 WordPress 中使用 Laravel

    你想过可以在 WordPress 中使用 Laravel 或者任意一种 PHP 框架吗? Corcel 可以帮你实现! 开发网站应用就应该是快捷并有趣的.当然了,每个应用都会有它自己的需求和生命周期. ...

  5. MongoDB最佳实践中文手册

    背景:查阅了一下MongoDB的相关文档,发现中文文档还是比较少的,工作中需要用到MongoDB,而这本<MongoDB最佳实践>是很好的选择,所以就把这本手册翻译了一下,其中生涩的专业用 ...

  6. Plupload 上传控件使用指南

    本文转载至(感谢原作者分享):http://www.cnblogs.com/2050/p/3913184.html#plupload_doc2 我之前写过一篇文章<文件上传利器SWFUpload ...

  7. 初识webgl--我的webgl学习第一课(基于threeJs)

    一,我为什么要学习webgl 一个偶然的机会,在和朋友的聊天过程中,听说了webgl,也许过去也看到过,但是没有特别在意过.原来,JavaScript也可以很好的渲染并在网页上显示三维动画,不用借助插 ...

  8. Scriplet的三种代码

    Jsp中注释分为显示注释和隐式注释, 显示注释 -- 可以通过查看源代码看到 <!-- 第一种注释 -->  隐式注释 --  源代码中看不到 <%--jsp注释---%> & ...

  9. [BZOJ 4361]isn

    Description 题库链接 给出一个长度为 \(n\) 的序列 \(A\) .如果序列 \(A\) 不是非降的,你必须从中删去一个数,这一操作,直到 \(A\) 非降为止.求有多少种不同的操作方 ...

  10. ●BZOJ 3676 [Apio2014]回文串

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3676 题解: 后缀数组,Manacher,二分 首先有一个结论:一个串的本质不同的回文串的个 ...