java8 函数式编程
/***
* 测试统计API <br>
* 小结:<br>
* 1.逻辑代码应用{} 包起来 不写{} 默认 + return <br>
* 2.重载方法参数必须加类型声明<br>
* 3.书写风格一个表达式只做一次抽象转换 <br>
* 4.最后断链了 stream 内部会关闭流,再执行流之类操作会抛异常<br>
* 5.表达式可以象管道一样绑定,接口与另一实例方法绑定<br>
* */
public static class Test4 {
public static void main(String[] args) {
List<Person> list1 = Person.ofList();
//sum 操作
long count = list1.stream().mapToInt(e -> e.getAge()).sum();
//reduce 操作
long count2 = list1.stream().mapToInt(e -> e.getAge()).reduce(0, (a,b)->a+b);
//max 操作
OptionalInt max = list1.stream().mapToInt(e -> e.getAge()).max();
//avg 操作
OptionalDouble count1 = list1.stream().mapToInt(e -> e.getAge()).average();
//返回统计对象
IntSummaryStatistics statistics=list1.stream().mapToInt(e -> e.getAge()).summaryStatistics();
//groupBy 操作
Map<Integer, List<Person>> map=list1.stream().collect(Collectors.groupingBy(Person::getAge));
//collect 集合结束操作
Collectors.toList();
Collectors.toSet();
//每次it 回调peek
list1.stream().filter(e->e.getAge()>2).mapToInt(e -> e.getAge()).peek( e->System.out.println("peek : "+e)).count();
//接口与实例方法绑定
list1.stream().forEach(System.out::println);
//并行流
list1.parallelStream().count();
System.out.println("count : " + count);
System.out.println("count2 : " + count2);
System.out.println("aver : " + count1.getAsDouble());
System.out.println("max : " + max.getAsInt());
System.out.println("statistics count : " + statistics.getCount());
System.out.println("groupBy size : " + map.size());
Map<String,String> m = new HashMap<>();
m.getOrDefault("a", "5");
m.merge("a", "addValue", (a,b)-> a+b);
System.out.println("map merge : " + m.get("a"));
}
}
import java.util.ArrayList;
import java.util.List;
public class Person {
private String name;
private int age;
public static Person of(String name, int age) {
Person result = new Person();
result.name = name;
result.age = age;
return result;
}
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public static List<Person> ofList() {
List<Person> result = new ArrayList<>();
for (int i = 0; i < 50; i++) {
result.add(of("a" + i, i % 5));
}
return result;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
java8 函数式编程的更多相关文章
- 关于Java8函数式编程你需要了解的几点
函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...
- Java8 函数式编程详解
Java8 函数式编程详解 Author:Dorae Date:2017年11月1日23:03:26 转载请注明出处 说起Java8,可能很多人都已经知道其最大的改进,就是引入了Lambda表达式与S ...
- Java8函数式编程探秘
引子 将行为作为数据传递 怎样在一行代码里同时计算一个列表的和.最大值.最小值.平均值.元素个数.奇偶分组.指数.排序呢? 答案是思维反转!将行为作为数据传递. 文艺青年的代码如下所示: public ...
- [2017.02.23] Java8 函数式编程
以前学过Haskell,前几天又复习了其中的部分内容. 函数式编程与命令式编程有着不一样的地方,函数式编程中函数是第一等公民,通过使用少量的几个数据结构如list.map.set,以及在这些数据结构上 ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...
- 漫漫人生路,学点Jakarta基础-Java8函数式编程
接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...
- Java8函数式编程的宏观总结
1.java8优势通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行. 2.函数式编程的核心使用不可变值和函数,函数对一个值进行处理,映射成另一个值. 3. ...
- java8函数式编程实例
什么是函数式编程 函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法.别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”. Stream 说到函数式编程,就不得 ...
- Java8函数式编程以及Lambda表达式
第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...
- 重识Java8函数式编程
前言 最近真的是太忙忙忙忙忙了,很久没有更新文章了.最近工作中看到了几段关于函数式编程的代码,但是有点费解,于是就准备总结一下函数式编程.很多东西很简单,但是如果不总结,可能会被它的各种变体所困扰.接 ...
随机推荐
- atitit.sql server2008导出导入数据库大的表格文件... oracle mysql
atitit.sql server2008导出导入数据库大的表格文件... 1. 超过80M的文件是不能在查询分析器中执行的 1 2. Oracle ,mysql大的文件导入 1 2.1. 使用sql ...
- TF Boys (TensorFlow Boys ) 养成记(五)
有了数据,有了网络结构,下面我们就来写 cifar10 的代码. 首先处理输入,在 /home/your_name/TensorFlow/cifar10/ 下建立 cifar10_input.py,输 ...
- iOS开发——高级技术&GameCenter服务
GameCenter服务 Game Center是由苹果发布的在线多人游戏社交网络,通过它游戏玩家可以邀请好友进行多人游戏,它也会记录玩家的成绩并在排行榜中展示,同时玩家每经过一定 的阶段会获得不同的 ...
- 数据类型/强制类型转换 和运算符---标识符规则/关键字 a++和++a区别
3.2关键字都是小写,TRUE FALSE NULL都不是Java关键字 3.3数据类型 变量相当于一个有名称的容器,该容器用于装各种不同类型的数据 Java类型分为2种 基本类型: 引用类型: 基本 ...
- Leetcode 219 Contains Duplicate II STL
找出是否存在nums[i]==nums[j],使得 j - i <=k 这是map的一个应用 class Solution { public: bool containsNearbyDuplic ...
- 编写西游记人物类(XiYouJiRenWu)
package java1; public class XiYouJiRenWu { double height; String name; String weapon; void printName ...
- 一个映射到mac风格按键的AHK脚本(替换虚拟机键盘映射)
Mac键位映射(部分) win+q 退出程序 win+w 关闭当前页面 win+h 隐藏当前窗口 win+shift+h 隐藏其他窗口 win+s 保存 win+o 打开 win+z 撤销 win+s ...
- android: SQLite查询数据
掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...
- Linux环境安装jdk
Linux中JDK1.6的安装和配置方法 一.安装 创建安装目录,在/usr/java下建立安装路径,并将文件考到该路径下: # mkdir /usr/java 1.jdk-6u11-linux-i5 ...
- android 常用小功能(第二版)
经历过一段岁月,转眼2013的半年都过去了,第二版整理好的小功能,答应大家发布的,直到今日,终于和大家相见了,第二版没有第一版多,大家也可以去参考第一版的内容,希望大家使用愉快! 目录: 1.获取当前 ...