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,配合起来用可以极 ...
随机推荐
- php中++ --运算
$x = 5; echo $x; echo "---"; // echo ++$x + $x; //6+6=12 $x=6 // echo ++$x + 5; //6+5=12 $ ...
- TK可视化之文件内容查找(升级篇)
升级为带有选择框 分三种查看格式一种是表格查看 一种是文本查看 一种是列表 1.列表查看类 # listbox 显示数据 import tkinter class ListShowData: def ...
- POJ-2253-Frogger +最短路小变形
传送门:http://poj.org/problem?id=2253 参考:https://www.cnblogs.com/lienus/p/4273159.html 题意:给出一个无向图,求一条从 ...
- CodeForces 1105E Helping Hiasat 最大独立集
Helping Hiasat 题解: 如果我们把连续的2出现的人都相互连边的话, 题目就是问最大独立集的答案是多少. 求最大独立集可以将图变成反图, 然后求最大团. 代码: #include<b ...
- 现代 JavaScript 教程到底是什么?
手册与规范 <现代 JavaScript 教程>是开源的现代 JavaScript 从入门到进阶的优质教程,它旨在帮助你逐渐掌握 JavaScript 这门语言.但是一旦你已经熟悉了这门语 ...
- Mac 不显示未知来源选项的解决办法/连接不上网络
原文来自百度经验: http://jingyan.baidu.com/article/eae078278b37d41fec5485b2.html 灰常感谢原作 关于mac无法连接wifi,我的解决办法 ...
- 几个Python爬虫工具介绍
Request Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用 上面一句话 出自Requests官方文档的第一句,从而奠定了其逗逼的文档风格.类似的还有: 警告: ...
- (一)分布式数据库tidb-简介
因为数据磁盘问题,最近进行了更换库,所以决定写关于这方面的专题的博客,博客信息参考的官方文档. 一.分布式数据库使用背景 随着互联网的飞速发展,业务量可能在短短的时间内爆发式地增长,对应的数据量可能快 ...
- 关于BFC的一些事
BFC的生成 在实现CSS的布局时,假设我们不知道BFC的话,很多地方我们生成了BFC但是不知道.在布局中,一个元素是block元素还是inline元素是必须要知道的.而BFC就是用来格式化块状元素盒 ...
- 一次使用scrapy的问题记录
前景描述: 需要获取某APP的全国订单量,及抢单量.由于没有全国的选项所以只能分别对每一个城市进行订单的遍历.爬虫每天运行一次,一次获取48小时内的订单,从数据库中取出昨天的数据进行对比,有订单被抢则 ...