参考文章:ImportNew

要在Android开发中使用lambda表达式,首先需要在 Module 的build.gradle中加入:

compileOptions {
targetCompatibility 1.8
sourceCompatibility 1.8
}

下面是我在Android Studio上写的一个demo :

/**
* java8 lambda表达式学习
* <p>
* http://www.importnew.com/16436.html
* <p>
* Created by javakam on 2018/4/2.
*/
public class MyLambda {
public static void main(String[] args) {
demo3();
} //1 lambda表达式实现Runnable
private static void demo1() {
new Thread(() -> System.out.println("hello lambda")).start();
} //2 进行事件处理
private static void demo2() {
// TextView textView=new TextView(context);
// textView.setOnClickListener(view-> {
// Toast.makeText(context, "click", Toast.LENGTH_SHORT).show()});
} //3 对列表进行迭代
private static void demo3() {
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(""));
// 使用Java 8的方法引用更方便,方法引用由::双冒号操作符标示,
// 看起来像C++的作用域解析运算符
features.forEach(System.out::println);
} //4 使用lambda表达式和函数式接口Predicate
//Predicate非常适合用于做过滤
private static void demo4() {
List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); System.out.println("Languages which starts with J :");
filter(languages, (str) -> ((String) str).startsWith("J")); System.out.println("Languages which ends with a ");
filter(languages, (str) -> str.toString().endsWith("a")); System.out.println("Print all languages :");
filter(languages, (str) -> true); System.out.println("Print no language : ");
filter(languages, (str) -> false); System.out.println("Print language whose length greater than 4:");
filter(languages, (str) -> ((String) str).length() > 4);
} private static void filter(List names, Predicate condition) {
for (Object obj : names) {
// 使用Predicate的test()方法判断该对象是否满足Predicate指定的条件
if (condition.test(obj)) {
System.out.println("" + obj);
}
}
//更帅的操作
names.stream().filter(n -> condition.test(n)).forEach(n -> System.out.println("" + n));
// names.stream().filter(n -> condition.test(n)).forEach(System.out::println); } //5 如何在lambda表达式中加入Predicate
private static void demo5() {
// 甚至可以用and()、or()和xor()逻辑函数来合并Predicate,
// 例如要找到所有以J开始,长度为四个字母的名字,你可以合并两个Predicate并传入
List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); Predicate<String> startWithJ = n -> n.toString().startsWith("J");
Predicate<String> length4 = n -> n.toString().length() == 4;
//and 输出:Java
//languages.stream().filter(startWithJ.and(length4)).forEach(System.out::println); //or 输出:Java C++
//Predicate<String> havePlusSignal = n -> n.toString().contains("+");
//languages.stream().filter(startWithJ.or(havePlusSignal)).forEach(System.out::println); //negate反面 输出: Scala C++ Haskell Lisp
languages.stream().filter(startWithJ.negate()).forEach(System.out::println); } //6.1 使用lambda表达式的Map和Reduce示例 - Map对象转换
private static void demo6_1() {
// 不使用lambda表达式为每个订单加上12%的税
List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
for (Integer cost : costBeforeTax) {
double price = cost + .12 * cost;
System.out.println(price);
}
// 使用lambda 类似于RxJava中的map操作符,都是起到对象转换的作用
costBeforeTax.stream().map(cost -> cost + 0.12 * cost).forEach(System.out::println); } //6.2 使用lambda表达式的Map和Reduce示例 - Reduce折叠操作
//reduce() 函数可以将所有值合并成一个。eg:SQL中的 sum()、avg() 或者 count() 的聚集函数,实际上就是 reduce 操作,因为它们接收多个值并返回一个值。
private static void demo6_2() {
// 为每个订单加上12%的税
// 老方法:
List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
double total = 0;
for (Integer cost : costBeforeTax) {
double price = cost + .12 * cost;
total = total + price;
}
System.out.println("total = " + total); double bill = costBeforeTax.stream().map(cost -> cost + .12 * cost).reduce((sum, price) -> sum + price).get();
System.out.println("bill = " + bill);
} //7 通过过滤创建一个String列表 -- filter
private static void demo7() {
List<String> strList = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
// 创建一个字符串列表,每个字符串长度大于2
List<String> filtered = strList.stream().filter(x -> x.length() > 2).collect(Collectors.toList());
System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);
} //8 对列表的每个元素应用函数
private static void demo8() {
// 将字符串换成大写并用横线链接起来
List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K", "Canada");
String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining("-"));
System.out.println(G7Countries);
} //9 复制不同的值,创建一个子列表 - distinct() 方法来对集合进行去重
private static void demo9() {
// 用所有不同的数字创建一个正方形列表
List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);
List<Integer> distinct = numbers.stream().map(i -> i * i).distinct().collect(Collectors.toList());
System.out.printf("Original List : %s , Square Without duplicates : %s %n", numbers, distinct);
} //10 计算集合元素的最大值、最小值、总和以及平均值
//summaryStatistics()可以返回IntSummaryStatistics、LongSummaryStatistics 或者 DoubleSummaryStatistic,描述流中元素的各种摘要数据。
private static void demo10() {
//获取数字的个数、最小值、最大值、总和以及平均值
List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
IntSummaryStatistics stats = primes.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("Highest prime number in List : " + stats.getMax());
System.out.println("Lowest prime number in List : " + stats.getMin());
System.out.println("Sum of all prime numbers : " + stats.getSum());
System.out.println("Average of all prime numbers : " + stats.getAverage());
}
}

注意:

 List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println(""));
forEach需要Android API 至少为24(即minSdkVersion 24)。
												

Android中使用Lambda表达式开发的更多相关文章

  1. Android中使用lambda表达式

    lambda 语法简介 视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 如果刚学Android,不知道怎么写点击事件可以跳转,传送门 要想在Android中使用lambda语法 ...

  2. C#中的Lambda表达式和表达式树

    在C# 2.0中,通过方法组转换和匿名方法,使委托的实现得到了极大的简化.但是,匿名方法仍然有些臃肿,而且当代码中充满了匿名方法的时候,可读性可能就会受到影响.C# 3.0中出现的Lambda表达式在 ...

  3. 一篇文章教会你使用Java8中的Lambda表达式

    简介 Java 8为开发者带来了许多重量级的新特性,包括Lambda表达式,流式数据处理,新的Optional类,新的日期和时间API等.这些新特性给Java开发者带来了福音,特别是Lambda表达式 ...

  4. 你知道C#中的Lambda表达式的演化过程吗

    你知道C#中的Lambda表达式的演化过程吗? 阅读目录 委托的使用 匿名方法 Func和Action Lambda的诞生 那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西 ...

  5. C++11中的Lambda表达式

    原文地址:C++中的Lambda表达式 作者:果冻想 一直都在提醒自己,我是搞C++的:但是当C++11出来这么长时间了,我却没有跟着队伍走,发现很对不起自己的身份,也还好,发现自己也有段时间没有写C ...

  6. Qt5中使用lambda表达式

    c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...

  7. Lambda 表达式,Java中应用Lambda 表达式

    一.Lambda 表达式 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 链接:知乎 先举一个普通的 Python 例 ...

  8. 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join

    在Linq to sql 和 Entity framework 中使用lambda表达式实现left join 我们知道lambda表达式在Linq to sql 和 Entity framework ...

  9. Qt5中的lambda表达式和使用lambda来写connect

    c11新特性中加入了lambda表达式,所以Qt 也支持 需在.pro文件中加入 CONFIG += c++11 例子: QString program = "C:/Windows/Syst ...

随机推荐

  1. c#语言集合分析

    集合的赋值: double fenshu = 0; al.Add(fenshu=double.Parse (Console .ReadLine ())); //如果是存数字,将来要比较大小,需要再添加 ...

  2. 7 家 IT 厂商 6394.5 万元中标天津公安云项目(虚拟化、数据库、软件开发)

    http://mp.weixin.qq.com/s/kjum54HJorGTPtZiM-HE1g 天津市公安局云计算平台项目分为:大数据部分.虚拟化部分.数据库部分,软件开发部分,预算分别为:2350 ...

  3. 完全使用css编写复选框

    在日常的项目中,出现复选框或者单选框,应该都属于常见需求了,最开始阶段,一般只有两种可能性: 一.完全使用  <input type="checkbox" />或者&l ...

  4. Oracle递归查询父子兄弟节点

      1.查询某节点下所有后代节点(包括各级父节点) 1 // 查询id为101的所有后代节点,包含101在内的各级父节点 2 select t.* from SYS_ORG t start with ...

  5. SpringBoot异步请求

    何为异步请求 在Servlet 3.0之前,Servlet采用Thread-Per-Request的方式处理请求,即每一次Http请求都由某一个线程从头到尾负责处理.如果一个请求需要进行IO操作,比如 ...

  6. 微信小程序笔记<三>入口app.js —— 注册小程序

    小程序开发框架在逻辑层使用的语言就是JavaScript,所以想玩小程序JavaScript的基本功一定要扎实.但小程序基于js做了一些修改,以方便开发者更方便的使用微信的一些功能,使得小程序更好的贴 ...

  7. django中路由系统和视图的对应关系(值的传递)-->主要内容(位置参数、关键字参数、额外参数、include分组[urls的分发]、命名分组、反向解析、APPEND_SLASH)

    路由系统也就是 urls.py文件,视图就是 views.py文件 路由系统里面要注意的事项 urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续. 若要从UR ...

  8. android 开发 实现一个app的引导页面,使用ViewPager组件(此引导的最后一页的Button会直接写在最后一页布局里,跟随布局滑进滑出)

    基本ViewPager组件使用方式与我之前写的https://blog.csdn.net/qq_37217804/article/details/80332634 这篇博客一致. 下面我们将重点详细解 ...

  9. python2和python3的内存使用情况

    python2 对回收后的整数复用内存不作处理 python3则改进了改设计,极大的减少了内存占用 例如 a = range(1000000000000) del a 此时: python2 对于a占 ...

  10. uva-529-枚举

    题意: a0,a1,a2,a3....an 对于任意的i,j,k 0<=k<=n 0<=i<=k-1 0<=j<=k-1 ak=ai+aj 求a0.....an 解 ...