public class LambdaMapReduce {

private static List<User> users = Arrays.asList(

new User(1, "张三", 12,User.Sex.MALE),

new User(2, "李四", 21, User.Sex.FEMALE),

new User(3,"王五", 32, User.Sex.MALE),

new User(4, "赵六", 32, User.Sex.FEMALE));

public static void main(String[] args) {

reduceAvg();

reduceSum();

//与stream.reduce方法不同,Stream.collect修改现存的值,而不是每处理一个元素,创建一个新值

//获取所有男性用户的平均年龄

Averager averageCollect = users.parallelStream()

.filter(p -> p.getGender() == User.Sex.MALE)

.map(User::getAge)

.collect(Averager::new, Averager::accept, Averager::combine);

System.out.println("Average age of male members: "

+ averageCollect.average());

//获取年龄大于12的用户列表

List<User> list = users.parallelStream().filter(p -> p.age > 12)

.collect(Collectors.toList());

System.out.println("age > 12: ");

System.out.println(list);

//按性别统计用户数

Map<User.Sex, Integer> map = users.parallelStream().collect(

Collectors.groupingBy(User::getGender,

Collectors.summingInt(p -> 1)));

System.out.println("sex -> num");

System.out.println(map);

//按性别获取用户名称

Map<User.Sex, List<String>> map2 = users.stream()

.collect(

Collectors.groupingBy(

User::getGender,

Collectors.mapping(User::getName,

Collectors.toList())));

System.out.println("sex -> name");

System.out.println(map2);

//按性别求年龄的总和

Map<User.Sex, Integer> map3 = users.stream().collect(

Collectors.groupingBy(User::getGender,

Collectors.reducing(0, User::getAge, Integer::sum)));

System.out.println("sex -> ageSum");

System.out.println(map3);

//按性别求年龄的平均值

Map<User.Sex, Double> map4 = users.stream().collect(

Collectors.groupingBy(User::getGender,

Collectors.averagingInt(User::getAge)));

System.out.println("sex -> ageAvg");

System.out.println(map4);

}

// 注意,reduce操作每处理一个元素总是创建一个新值,

// Stream.reduce适用于返回单个结果值的情况

//获取所有用户的平均年龄

private static void reduceAvg() {

// mapToInt的pipeline后面可以是average,max,min,count,sum

double avg = users.parallelStream().mapToInt(User::getAge)

.average().getAsDouble();

System.out.println("reduceAvg User Age: " + avg);

}

//获取所有用户的年龄总和

private static void reduceSum() {

double sum = users.parallelStream().mapToInt(User::getAge)

.reduce(0, (x, y) -> x + y); // 可以简写为.sum()

System.out.println("reduceSum User Age: " + sum);

}

}

class User{

public int id;

public String name;

public int age;

public Sex gender;

public User(int id, String name, int age, Sex gender) {

this.id=id;

this.name=name;

this.age=age;

this.gender=gender;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public enum Sex{

FEMALE,

MALE;

}

public Sex getGender() {

return gender;

}

public void setGender(Sex gender) {

this.gender = gender;

}

}

class Averager implements IntConsumer

{

private int total = 0;

private int count = 0;

public double average() {

return count > 0 ? ((double) total)/count : 0;

}

public void accept(int i) { total += i; count++; }

public void combine(Averager other) {

total += other.total;

count += other.count;

}

}

java8-3-LambdaMapReduce例子的更多相关文章

  1. java8 stream 流 例子

    Trader raoul = new Trader("Raoul", "Cambridge"); Trader mario = new Trader(" ...

  2. java8新特性系列:[1]让你的eclipse支持java8

    package com.anhui.jdk8; /** * 针对eclipse是否支持java8小测试 * MainClass * @author zhongzh * */ public class ...

  3. JDK8的Stream操作

    原文:https://mp.weixin.qq.com/s/N2zor5RzuHHTHQLHWVBttg 作者:思海同学  好好学java 其他资料:https://mp.weixin.qq.com/ ...

  4. Java8中Lambda表达式的10个例子

    Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 //Before Java 8: new Thread(new Runnable() { @Overri ...

  5. java8 Lambda表达式的10个例子(转)

    原文:http://jobar.iteye.com/blog/2023477 Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 收藏代码// ...

  6. java8 stream lambda 一个例子

    import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Pa ...

  7. JAVA-8大基本类型与包装类的例子(基础必备)

    package com.net.xinfang.reflect; /*** * 8种基本类型(byte,int,short,long,float,double,char,boolean) * 布尔型只 ...

  8. java8函数式接口小例子

    // Function<T, R> -T作为输入,返回的R作为输出 Function<String,String> function = (x) -> {System.o ...

  9. java8 函数接口 Predicate例子

    import java.util.HashSet; import java.util.Collection; import java.util.function.Predicate; public c ...

  10. java8 Lambad表达式自己的例子

    service层方法 public <E> E outer(Function<Session, E> function) { return dao.outer(function ...

随机推荐

  1. PAT_A1072#Gas Station

    Source: PAT A1072 Gas Station (30 分) Description: A gas station has to be built at such a location t ...

  2. 如何在Loadrunner11中解决HTTP BASIC认证登录报401的问题

    在对Carte+kettle的性能测试过程中,通过在loadrunner中用web_set_user("cluster", "cluster","17 ...

  3. 自编码器----Autoencoder

    一.自编码器:降维[无监督学习] PCA简介:[线性]原矩阵乘以过渡矩阵W得到新的矩阵,原矩阵和新矩阵是同样的东西,只是通过W换基. 自编码: 自动编码器是一种无监督的神经网络模型,它可以学习到输入数 ...

  4. 【剑指Offer】39、平衡二叉树

      题目描述:   输入一棵二叉树,判断该二叉树是否是平衡二叉树.这里的定义是:如果某二叉树中任意结点的左.右子树的深度相差不超过1,那么它就是一棵平衡二叉树.   解题思路:   首先对于本题我们要 ...

  5. 【剑指Offer】9、变态跳台阶

      题目描述:   一只青蛙一次可以跳上1级台阶,也可以跳上2级--它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法.   解题思路:   当只有一级台阶时,f(1)=1:当有两级台阶时, ...

  6. STL源码分析之第一级配置器

    前言 上一节我们分析了空间配置器对new的配置, 而STL将空间配置器分为了两级, 第一级是直接调用malloc分配空间, 调用free释放空间, 第二级三就是建立一个内存池, 小于128字节的申请都 ...

  7. Python实现8中常用排序算法

    L = [2,6,4,7,9,1,3,5,8] # 1.插入排序 def insert_sort(List): n = len(List) for i in range(1,n): # 得到索引 j ...

  8. 【2】Django安装

    **万物负阴而抱阳,冲气以为和 ** ——老子<道德经> 我们静下心态,开始我们的Django之旅 本节内容 Django的安装 安装结果验证 了解官方文档 1. 安装Django 我们强 ...

  9. 阿里云oss用做文件存储工具类

    package com.fsk.fsksystem.util; import java.io.IOException; import java.io.InputStream; import java. ...

  10. DateTime日期格式转换,不受系统格式的影响

    Application.Initialize;  with FormatSettings do  begin    ShortDateFormat := 'yyyy-mm-dd';    LongDa ...