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函数式编程
		
前言 最近真的是太忙忙忙忙忙了,很久没有更新文章了.最近工作中看到了几段关于函数式编程的代码,但是有点费解,于是就准备总结一下函数式编程.很多东西很简单,但是如果不总结,可能会被它的各种变体所困扰.接 ...
 
随机推荐
- paip.Log4j配置不起作用的解决
			
paip.Log4j配置不起作用的解决 1.jar包里的log4j配置 看累挂jar,真的有个" webservices-rt.jar\com\sun\org\apache\xml\inte ...
 - Python之Django--ORM连表操作
			
一对多 class UserType(models.Model): caption = models.CharField(max_length=32) class UserInfo(models.Mo ...
 - [原创]Windows Phone SDK下载
			
[原创]Windows Phone SDK下载 http://dev.windowsphone.com/zh-cn/downloadsdk
 - navigationBar设置透明
			
//设置全透明方式 一.完全不用图片(iOS7之后有效)[self.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBar ...
 - nginx的反向代理和负载均衡的区别
			
反向代理,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回反向代理服务器上的资源给用户,而如果反向代理服务器上没有的资源,就转发给后面的负载均衡服务器,负载均衡服务器再将请求分发给后端的 ...
 - 使用 Aircrack-ng 破解 WEP 和 WPA/WPA2 加密的 Wi-Fi 密码。(转)
			
1.首先请不要使用此方法去搞破坏,去蹭Wi-Fi,因为不装逼地说,我认为技术本身的价值很大,尤其是在学习这个技术的过程中解决遇到的问题,当经过重重困难最后终于成功之后的喜悦又怎么能拿去蹭网呢.我在此过 ...
 - 使用Enitity Framework实现增删改查服务中的一些通用思路
			
添加 → 方法参数中有一个有关添加视图模型类型的形参,比如vm→ 根据vm的某个属性,比如Name判断在上下文中是否存在,如果不存在就抛EntityNotFoundException异常→ 判断vm所 ...
 - RUF MVC5 Repositories Framework Generator代码生成工具介绍和使用
			
RUF MVC5 Repositories Framework Generator代码生成工具介绍和使用 功能介绍 这个项目经过了大半年的持续更新到目前的阶段基本稳定 所有源代码都是开源的,在gith ...
 - [leetcode] Min Stack @ Python
			
原题地址:https://oj.leetcode.com/problems/min-stack/ 解题思路:开辟两个栈,一个栈是普通的栈,一个栈用来维护最小值的队列. 代码: class MinSta ...
 - linux部署war包方案
			
batch.sh内容: su - -c" 使用管理员权限 service tomcat6 stop; 停止tomca6t服务 mkdir /home/jnfwzFtp/bushubackup ...