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,配合起来用可以极 ...
随机推荐
- 【Leetcode】【简单】【17. 整数反转】【JavaScript】
题目描述 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321示例 3: 输 ...
- ThreadLocal可以解决并发问题吗?
前言 到底什么是线程的不安全?为什么会存在线程的不安全?线程的不安全其实就是多个线程并发的去操作同一共享变量没用做同步所产生意料之外的结果.那是如何体现出来的呢?我们看下面的一个非常经典的例子:两个操 ...
- css_transition_animation(内含贝赛尔曲线详解)
区别: transition也叫过渡动画,主要是用于让一个元素从一种状态过渡到另一种状态效果,常用于主动触发的效果.例如移动端的页面切换(很常用).button点击效果(也很常见). animatio ...
- 第6章 面向对象的程序设计 6.1 javascript对象
ECMA-262 把对象定义为: “无序属性的集合, 其属性可以包含基本值. 对象或者函数. ” 严格来讲,这就相当于说对象是一组没有特定顺序的值.对象的每个属性或方法都有一个名字,而每个名字都映射到 ...
- SCRUM的五个价值观
转自:http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html#tab-id-8 承诺 – 愿意对目标做出承诺 专注– 把你的心思 ...
- HYSBZ - 4016 最短路径树问题 点分治 + 最短路径最小字典序
题目传送门 题解:首先对于给定的图,需要找到那些从1好点出发然后到x号点的最短路, 如果有多条最短路就要找到字典序最小的路,这样扣完这些边之后就会有一棵树.然后再就是很普通的点分治了. 对于扣边这个问 ...
- HDU 6430 Problem E. TeaTree(虚树)
Problem E. TeaTree Problem Description Recently, TeaTree acquire new knoledge gcd (Greatest Common D ...
- 2019 HZNU Winter Training Day 14 Comprehensive Training
A - Choosing Capital for Treeland CodeForces - 219D 题意:有一颗单向边的树,要选取一个结点作为首都.要求是这个结点到其它结点,总共需要翻转的路径数量 ...
- 常用分享功能.超级简单,qq 微信 新浪微博分享
<div id="share"> <a href="javascript:void(0)" share-type="qzone&qu ...
- Python---变量和简单的数据类型
我会站在一个c/c++的基础上去看python的学习,尽量会在文中比较两者的区别,有什么说的不对的地方,欢迎指出,大家共同学习(o_o).(此后的文章都会基于python3以上版本去写) 1.变量 变 ...