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. change project compliance and jre to 1.5

    这个主要检查一下几点 项目的jdk为1.7 java版本设置为1.7 java compiler 的页面设置为以下,并且去掉勾选java compiler 下面的 enableproject spec ...

  2. 团体程序设计天梯赛-练习集-L1-040. 最佳情侣身高差

    L1-040. 最佳情侣身高差 专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09=(男方的身高).如果符合,你俩的身高差不管是牵手.拥抱.接吻,都是最和谐的差度. ...

  3. mongodb多实例部署

    安装与管理MongoDB 1.安装解压源码包 [root@bogon ~]# tar xf mongodb-linux-x86_64-rhel70-4.0.6.tgz [root@bogon ~]# ...

  4. 【剑指Offer】20、包含min函数的栈

      题目描述:   定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)).   解题思路:   使用两个stack,一个为数据栈,另一个为辅助栈.数据栈 ...

  5. Innodb 中的事务隔离级别和锁的关系

    转自:https://tech.meituan.com/innodb-lock.html 前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式.同时数据 ...

  6. 解决windows文件在linux系统中显示乱码的问题

    问题: 在Windows下用matlab写的代码(.m)到Linux(centos)下,注释的中文全是乱码. 原因: Windows下默认使用的是GB2312编码,Linux默认使用的是UTF-8. ...

  7. PHP中把数据库查询结果输出为json格式

    <?php header("Content-type:text/html;charset=utf-8");//字符编码设置 $servername = "local ...

  8. Problem 52

    Problem 52 It can be seen that the number, 125874, and its double, 251748, contain exactly the same ...

  9. 10.IDEAD 的xml中配置DTD

    此时发现最后一行已经变成绿色就说明可以了,有提示了

  10. python 用PIL Matplotlib处理图像的基本操作

    在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片.本人偏爱 matpoltlib,因为它的语法更像 matlab. 一.matplotlib 1. ...