我正参加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. js中的栈与堆的讲解/基本数据类型与引用类型的讲解

    1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小不定也不会自动释放. 2.基本类型和引用类型 基本类型:存放在栈内存中的简单数 ...

  2. windows汇编环境配置

    原文地址 软件下载 需要的软件已经打包,包括dosbox和MASM.如果没有这两个软件可以在下面的地址下载. http://hjwblog.com/game/汇编环境.zip 点击下载 安装dosbo ...

  3. 解决将/etc/passwd文件中1000改为0后只能guest进入系统的问题

    一, 进入正题之前我先在这里介绍一下vi编辑器的几条主要的编辑命令,以为一会会用的到的.(悔不改当初没好好学unix啊啊啊) 最重要的一点是要知道vi编辑器分为编辑模式和命令模式,按esc键就能从编辑 ...

  4. 微信小程序开发•模块化

    微信小程序的MINA框架,其实是许多前端开发技术的组合.这篇文章中,我们来简单地讨论一下模块化. 1.模块化标准 玩前端的同学大部分都知道模块化的几个标准,CommonJs / AMD / CMD.这 ...

  5. Words to Use Instead of "Very"

  6. [USACO13DEC]假期计划(黄金)Vacation Planning (gold)

    题目翻译不好,这里给出一份 题目背景 Awson是某国际学校信竞组的一只大佬.由于他太大佬了,于是干脆放弃了考前最后的集训,开车(他可是老司机)去度假.离开学校前,他打开地图,打算做些规划. 题目描述 ...

  7. [Codeforces]848C - Goodbye Souvenir

    题目大意:n个数字,m次操作,支持修改一个数字和查询一个区间内每种数字最大出现位置减最小出现位置的和.(n,m<=100,000) 做法:把每个数字表示成二维平面上的点,第一维是在数组中的位置, ...

  8. operator[] 和 insert

    operator[] 和 insert: map的[]操作和其他容器和内置[]没有关系 如果我们通过[]向map中插入or更新值,需要考虑一些东西 1.键已经存在,那么直接进行修改即可 2.键不存在, ...

  9. hihocoder #1159 : 扑克牌

    描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52张牌中的若干张,请计算将它们排成一列,相邻的牌面值不同的方案数. 牌的表示方法为XY,其中 ...

  10. 5分钟快速打造WebRTC视频聊天

    百度一下WebRTC,我想也是一堆.本以为用这位朋友( 搭建WebRtc环境 )的SkyRTC-demo 就可以一马平川的实现聊天,结果折腾了半天,文本信息都发不出去,更别说视频了.于是自己动手. 想 ...