Java8新特性——lambda函数式编程
一、遍历循环
/**
* @author jiaqing.xu@hand-china.com
* @version 1.0
* @name
* @description 循环遍历
* @date 2018/7/13
*/
public class test1 {
public static void main(String[] args) {
String[] atp = {
"b",
"a",
"c",
"d",
"e",
"f",
"g",
"h"};
List<String> players = Arrays.asList(atp); // 直接对list进行循环输出
players.forEach((p) -> System.out.print(p + "; "));
System.out.println("\n");
//循环输出带换行符,方法引用使用双冒号
players.forEach(System.out::println); }
}
二、数据过滤
/**
* @author jiaqing.xu@hand-china.com
* @version 1.0
* @name
* @description 数据过滤
* @date 2018/7/13
*/
public class test2 {
public static void main(String args[]) {
List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
//打印以J开头的字符串
System.out.println("Print all languages :");
filter1(languages, (str) -> str.toString().startsWith("J"));
//条件恒为假
System.out.println("Print no language : ");
filter(languages, (str) -> false);
//混合过滤条件
System.out.println("...");
filter3(languages);
} //传统过滤
public static void filter(List<String> names, Predicate condition) {
for (String name : names) {
if (condition.test(name)) {
System.out.println(name + " ");
}
}
} //以lambda方式过滤
public static void filter1(List names, Predicate condition) {
names.stream().filter((name) -> (condition.test(name))).forEach((name) -> System.out.println(name + " "));
} public static void filter3(List names) {
//第一个规则是以J开头
Predicate<String> startsWithJ = (n) -> n.startsWith("J");
//第二个规则是长度为4
Predicate<String> fourLetterLong = (n) -> n.length() == 4;
names.stream().filter(startsWithJ.and(fourLetterLong)).forEach((n) -> System.out.println("The result is:" + n));
}
}
三、Map和Reduce函数计算
/**
* @author jiaqing.xu@hand-china.com
* @version 1.0
* @name
* @description map和reduce 函数计算
* @date 2018/7/13
*/
public class test3 {
public static void main(String[] args) {
// With Lambda expression:
//Map用于函数计算,为集合中的每个元素增加一定的数值
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> (Integer) cost + .12 * (Integer) cost).forEach(System.out::println); //reduce 类似sql中的sum avg count
List costBeforeTax2 = Arrays.asList(100, 200, 300, 400, 500);
Object bill = costBeforeTax2.stream()
.map((cost) -> (Integer) cost + .12 * (Integer) cost)
.reduce((sum, cost) -> (Double) sum + (Double) cost)
.get();
System.out.println("Total : " + bill); //应用函数将字符串转换为大写形式并用逗号拼接
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); //计算list中最大值、最小值和平均值
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());
}
}
Java8新特性——lambda函数式编程的更多相关文章
- [译]java8新特性:函数式编程(functional programming)的优点
Java8引入了函数式编程,他对java是一个极大的扩展.Java从此不在是一个单纯的面向对象语言,现在他同时混合了函数式编程.这是巨大的改变,需要我们调整面对对象的编程习惯,以适应这些变化. 但是为 ...
- Java8新特性:函数式编程
1. 概述 函数式编程学习目的: 能够看懂公司里的代码 大数据量下处理集合效率更高 代码可读性高 消灭嵌套地狱 函数式编程思想: 面向对象思想需要关注用什么对象完成什么事情.而函数式编程思想就类似于我 ...
- 乐字节-Java8新特性之函数式接口
上一篇小乐带大家学过 Java8新特性-Lambda表达式,那什么时候可以使用Lambda?通常Lambda表达式是用在函数式接口上使用的.从Java8开始引入了函数式接口,其说明比较简单:函数式接口 ...
- Java8新特性-Lambda表达式是什么?
目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...
- 乐字节-Java8新特性-Lambda表达式
上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...
- java8新特性——Lambda表达式
上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ...
- Java8 新特性 Lambda & Stream API
目录 Lambda & Stream API 1 Lambda表达式 1.1 为什么要使用lambda表达式 1.2 Lambda表达式语法 1.3 函数式接口 1.3.1 什么是函数式接口? ...
- JDK 8 新特性之函数式编程 → Stream API
开心一刻 今天和朋友们去K歌,看着这群年轻人一个个唱的贼嗨,不禁感慨道:年轻真好啊! 想到自己年轻的时候,那也是拿着麦克风不放的人 现在的我没那激情了,只喜欢坐在角落里,默默的听着他们唱,就连旁边的妹 ...
- java8新特性Lambda和Stream
Java8出来已经4年,但还是有很多人用上了jdk8,但并没用到里面的新东西,那不就等于没用?jdk8有许多的新特性,详细可看下面脑图 我只讲两个最重要的特性Lambda和Stram,配合起来用可以极 ...
随机推荐
- 约瑟夫环问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
首先,我最大的学习来源不是百度而是我群友~~在这里表白一波我热爱学习的群友们!然后今天群里突然有人提出了题目的这个问题:有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出 ...
- 洛谷- P1306 斐波那契公约数 - 矩阵快速幂 斐波那契性质
P1306 斐波那契公约数:https://www.luogu.org/problemnew/show/P1306 这道题目就是求第n项和第m项的斐波那契数字,然后让这两个数求GCD,输出答案的后8位 ...
- HDU - 2121 Ice_cream’s world II 无根最小树形图
HDU - 2121 :http://acm.hdu.edu.cn/showproblem.php?pid=2121 比较好的朱刘算法blog:https://blog.csdn.net/txl199 ...
- CodeForces 1018B The hat
The hat 题解: 定义d[i]为第i个数和他对面的差值. 然后我们可以发现d[i]和d[i+1]的差值只会有3种情况2, -2, 0. 并且可以知道 d[i] = - d[i+n/2] 所以如果 ...
- lightoj 1283 - Shelving Books(记忆化搜索+区间dp)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1283 题解:这题很显然一看就像是区间dp,但是单纯的区间dp好像解决不了问题可 ...
- cesium中json,geojson,stk,影像切片等数据的加载
cesium中json.topojson.geojson.stk,影像切片等数据的加载 一.geojson.topojson,json数据的加载 不管是哪种json,都可以通过GeoJsonDataS ...
- 关于Math常用的方法
1. 常用的Math用法 Math.random() //0-1 的随机数 Math.round() //四舍五入取整 Math.ceil() //向上取整 Math.floor() //向下取整 M ...
- java 高薪计划
一.基础 集合类,并发包,IO/NIO,JVM,内存模型,泛型,异常,反射,等有深入了解,最好是看过源码了解底层的设计. 二.需要全面的互联网主流技术相关知识 深入了解mysql,redis,mong ...
- Python---网页元素
文章目录 1. 前言 万维网 万维网的关键技术 2. 网页基本框架 HTML CSS: JavaScript 在介绍审查元素之前我们先简单介绍一下网页的基本框架 1. 前言 万维网 万维网(英语:Wo ...
- 深入理解SQL Server数据库Select查询原理(一)
使用SQL Server十年有余,但是一直对其Select查询机制原理一致不明,直到最近有个通讯录表,很简单的一张表(但因简单,所以当时并没有考虑按部门排序问题),结果想查询某个单位所有部门(不重复) ...