/***
* 测试统计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 函数式编程的更多相关文章

  1. 关于Java8函数式编程你需要了解的几点

    函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...

  2. Java8 函数式编程详解

    Java8 函数式编程详解 Author:Dorae Date:2017年11月1日23:03:26 转载请注明出处 说起Java8,可能很多人都已经知道其最大的改进,就是引入了Lambda表达式与S ...

  3. Java8函数式编程探秘

    引子 将行为作为数据传递 怎样在一行代码里同时计算一个列表的和.最大值.最小值.平均值.元素个数.奇偶分组.指数.排序呢? 答案是思维反转!将行为作为数据传递. 文艺青年的代码如下所示: public ...

  4. [2017.02.23] Java8 函数式编程

    以前学过Haskell,前几天又复习了其中的部分内容. 函数式编程与命令式编程有着不一样的地方,函数式编程中函数是第一等公民,通过使用少量的几个数据结构如list.map.set,以及在这些数据结构上 ...

  5. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

      本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...

  6. 漫漫人生路,学点Jakarta基础-Java8函数式编程

    接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...

  7. Java8函数式编程的宏观总结

    1.java8优势通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行. 2.函数式编程的核心使用不可变值和函数,函数对一个值进行处理,映射成另一个值. 3. ...

  8. java8函数式编程实例

    什么是函数式编程 函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法.别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”. Stream 说到函数式编程,就不得 ...

  9. Java8函数式编程以及Lambda表达式

    第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...

  10. 重识Java8函数式编程

    前言 最近真的是太忙忙忙忙忙了,很久没有更新文章了.最近工作中看到了几段关于函数式编程的代码,但是有点费解,于是就准备总结一下函数式编程.很多东西很简单,但是如果不总结,可能会被它的各种变体所困扰.接 ...

随机推荐

  1. 为什么心跳包(HeartBeat)是必须的?

    几乎所有的网游服务端都有心跳包(HeartBeat或Ping)的设计,在最近开发手游服务端时,也用到了心跳包.思考思考,心跳包是必须的吗?为什么需要心跳包?TCP没有提供断线检测的方法吗?TCP提供的 ...

  2. [BTS] Faulting application name: BTSNTSvc.exe, version: 3.9.469.0, time stamp: 0x4c547e09

    Log Name: ApplicationSource: Application ErrorDate: 8/22/2013 1:28:35 AMEvent ID: 1000Task Category: ...

  3. C#动态加载树菜单

    在做权限系统的时候,需要有一个树形的菜单.下图就是一个树形菜单的样式 但问题是,我们可以实现写死的树形菜单.什么是写死的?就是在前台代码中写好要加载的树形菜单是什么样子的.但是我们权限系统的要求是动态 ...

  4. paip.获取地理位置根据Ip

    paip.获取地理位置根据Ip html转换txt 正则表达式截取mid 作者Attilax  艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:// ...

  5. 从range和xrange的性能对比到yield关键字(上)

    使用xrange   当我们获取某个数量的循环时,我们惯用的手法是for循环和range函数,例如: for i in range(10): print i 这里range(10)生成了一个长度为10 ...

  6. python中os和sys模块的详解

    平时在工作中经常会用到os模块和sys模块的一些特性,下面是这些特性的一些相关解释,希望对大家有所帮助 os模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os. ...

  7. Android 使WebView支持HTML5 Video(全屏)播放的方法

    http://blog.csdn.net/zrzlj/article/details/8050633  1)需要在AndroidManifest.xml文件中声明需要使用HardwareAcceler ...

  8. Language

    TODO Java(jdk8),Scala,Spring,Spark,Python,Linux,C,Netty,HttpClient,Hadoop YARN,RaspberryPi Jetty,Tom ...

  9. C#:WebBrowser中伪造referer,为何对流量统计器无效?

    使用webbrowser伪造referer的方法:webBrowser1.Navigate(url, "_self", null, "Referer:http://www ...

  10. Gulan查询UI排布

    遇到一个问题,如何在相对布局里把两个item放在同一行,而且高度一样呢? <RelativeLayout xmlns:android="http://schemas.android.c ...