我正参加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. SpringBoot(四):banner的控制

    banner在springboot中是一个支持可配(banner的样式,banner的颜色,banner的内容).是否显示. 1)banner显示内容配置: 默认springboot如果在src/re ...

  2. *Boosting*笔记

    集成算法之boosting 集成方法  1. Parallel methods:   1. bagging   2. Random Forest  2. Sequence methods:   1. ...

  3. if else if,switch case二者的联系与区别

    前段时间在学习中听到了一个关于条件判断语句的问题,分析if else if语句和switch case语句这两者之间的联系和区别,从而使用其中最有效率的一种方法. 一.if...else if if. ...

  4. Java高级篇(二)——网络通信

    网络编程是每个开发人员工具相中的核心部分,我们在学习了诸多Java的知识后,也将步入几个大的方向,Java网络编程就是其中之一. 如今强调网络的程序不比涉及网络的更多.除了经典的应用程序,如电子邮件. ...

  5. [LeetCode] Output Contest Matches 输出比赛匹配对

    During the NBA playoffs, we always arrange the rather strong team to play with the rather weak team, ...

  6. [AHOI 2012]树屋阶梯

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...

  7. [HAOI2007]上升序列

    Description 对于一个给定的S={a1,a2,a3,…,an},若有P={ax1,ax2,ax3,…,axm},满足(x1 < x2 < … < xm)且( ax1 < ...

  8. [SDOI2010]地精部落

    题目描述 传说很久以前,大地上居住着一种神秘的生物:地精. 地精喜欢住在连绵不绝的山脉中.具体地说,一座长度为N的山脉H可分为从左到右的N段,每段有一个[b][u]独一无二[/u][/b]的高度Hi, ...

  9. 【BZOJ1951】【SDOI2010】古代猪文

    Background "在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心--" --选自猪王国民歌 很久很 ...

  10. bzoj 4180: 字符串计数

    Description SD有一名神犇叫做Oxer,他觉得字符串的题目都太水了,于是便出了一道题来虐蒟蒻yts1999. 他给出了一个字符串T,字符串T中有且仅有4种字符 'A', 'B', 'C', ...