`
bugyun
  • 浏览: 556162 次
社区版块
存档分类
最新评论

JDK 8 函数式编程入门2-code

    博客分类:
  • Java
 
阅读更多

 

Collect.java

package constant;

import entity.User;

import java.util.ArrayList;
import java.util.List;

/**
 * @program: java8
 * @description:
 * @author: bugyun
 * @create: 2018-11-05 10:02
 */
public class Collect {



    public final static List<String> listStr = new ArrayList<>();
    public final static List<Integer> listInt = new ArrayList<>();
    public final static List<User> listEntiyJapan = new ArrayList<>();
    public final static List<User> listEntiyChina = new ArrayList<>();





    static {
        listStr.add("Google");
        listStr.add("Facebook");
        listStr.add("Microsoft");
        listStr.add("IBM");
        listStr.add("Yahoo");

/////////////////////////////////////////////
        listInt.add(25);
        listInt.add(21);
        listInt.add(50);
/////////////////////////////////////////////
        User one = new User();
        one.setId(111);
        one.setName("tom");
        one.setPassword("123456");

        User two = new User();
        two.setId(122);
        two.setName("jack");
        two.setPassword("123456");

        User three = new User();
        three.setId(333);
        three.setName("lisa");
        three.setPassword("123456");

        listEntiyJapan.add(three);
        listEntiyJapan.add(one);
        listEntiyJapan.add(two);
////////////////////////////////////////////

        User one1 = new User();
        one1.setId(9000);
        one1.setName("zhangsan");
        one1.setPassword("123456");

        User two1 = new User();
        two1.setId(9001);
        two1.setName("wangwu");
        two1.setPassword("123456");

        User three1 = new User();
        three1.setId(9002);
        three1.setName("zhaoliu");
        three1.setPassword("123456");

        listEntiyChina.add(three1);
        listEntiyChina.add(one1);
        listEntiyChina.add(two1);

    }


}

 

 

User.java

package entity;

/**
 * @program: java8
 * @description:
 * @author: bugyun
 * @create: 2018-11-05 10:19
 */
public class User {

    private Integer id ;
    private  String name ;
    private String password ;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

 

 

StreamMy.java

package lambda;

import constant.Collect;
import entity.User;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @program: java8
 * @description:
 * @author: bugyun
 * @create: 2018-11-05 09:59
 */
public class StreamMy {

    public static void main(String[] args) {
//        long count = count(Collect.listEntiyJapan);
//        System.out.println(count);
//
//        List<String> collected = listStr("hello", " world ", " honey");
//        System.out.println(collected);
//
//        List<String> collectedMap = listMap("hello", " world ", " honey");
//        System.out.println(collectedMap);
//
//        List<User> poList = map(Collect.listEntiyJapan);
//        System.out.println(poList);
//
//        List<User> listTwo = listTwo(Collect.listEntiyChina, Collect.listEntiyJapan);
//        System.out.println(listTwo);
//
//         String max = max(Collect.listStr);
//        System.out.println(max);
//
//        Integer min = min(Collect.listInt);
//        System.out.println(min);
//
//        Integer reduce = reduce(Collect.listInt);
//        System.out.println(reduce);
//
//        Integer reduce = reduceSum(Collect.listInt);
//        System.out.println(reduce);

        Integer reduceParallel = reduceParallel(Collect.listInt);
        System.out.println(reduceParallel);


    }


    /**
     *  获取集合中id小于300的人数
     * @param list
     * @return
     */
    public static Long count(List<User> list) {
        Long result = list.stream()
                .filter(po -> po.getId() < 300)
                .count();
        return result;
    }

    /**
     * collect(toList())
     *  方法由 Stream 里的值生成一个列表,是一个及早求值操作。可以理解为 Stream 向 Collection 的转换。
     *
     * @param str
     * @return
     */
    public static List<String> list(String ... str){
        List<String> collected = Stream.of(str)
                                    .collect(Collectors.toList());
        return collected;
    }


    /**
     * map
     *  如果有一个函数可以将一种类型的值转换成另外一种类型,map 操作就可以使用该函数,将一个流中的值转换成一个新的流。
     *
     * @param strs
     * @return
     */
    public static List<String> listMap(String ... strs){
        List<String> collected = Stream.of(strs)
                                    .map(str -> str.toUpperCase())
                                    .collect(Collectors.toList());
        return collected;
    }

    /**
     * map
     *  如果有一个函数可以将一种类型的值转换成另外一种类型,map 操作就可以使用该函数,将一个流中的值转换成一个新的流。
     *
     * @param list
     * @return
     */
    public static List<User> map(List<User> list){
        List<User> result = list.stream()
                .filter(po -> po.getId() < 300)
                .collect(Collectors.toList());
        return result;
    }

    /**
     * flatMap
     *  合并多个 Collection。
     *
     * @param listOne
     * @param listTwo
     * @return
     */
    public static List<User> listTwo(List<User> listOne ,List<User> listTwo){
        List<User> result = Stream.of(listOne, listTwo)
                .flatMap(numbers -> numbers.stream())
                .collect(Collectors.toList());
        return result;
    }

    /**
     * max 返回的是一个 Optional 对象,可能为空。 String的话是按首字母排序的
     *
     * @param list
     * @return
     */
    public static String max(List<String> list) {
        String result = list.stream()
                .max(String::compareTo)    // 等同于 (str1, str2) -> str1.compareTo(str2),且都是 String 类型
                .get();
        return result;
    }

    public static Integer min(List<Integer> list) {
        Integer result = list.stream()
                .min(Integer::compareTo)
                .get();
        return result;
    }

    public static Integer reduce(List<Integer> list) {
        Integer result = list.stream()
                .reduce(0, (one, two) -> one + two);
        return result;
    }

    public static Integer reduceSum(List<Integer> list) {
        Integer result = list.stream()
                .reduce(0,Integer::sum);
        return result;
    }

    /**
     * parallel()
     *
     *  数据并行化是指将数据分成块,为每块数据分配单独的处理单元
     *  a. 如果你去计算这段代码所花的时间,很可能比不加上 parallel() 方法花的时间更长
     *  b. 这是因为数据并行化会先对数据进行分块,然后对每块数据开辟线程进行运算,这些地方会花费额外的时间
     *  c. 并行化操作只有在 数据规模比较大 或者 数据的处理时间比较长 的时候才能体现出有事
     *  d. 所以并不是每个地方都需要让数据并行化,应该具体问题具体分析
     * @param list
     * @return
     */
    public static Integer reduceParallel(List<Integer> list) {
        Integer result = list.stream()
                .parallel()
                .reduce(Integer::sum)
                .get();
        return result;
    }

}

 

分享到:
评论

相关推荐

    jdk8 jdk-8u251-windows-x64 百度网盘下载

    官方下载链接:https://download.oracle.com/otn/java/jdk/8u251-b08/3d5a2bb8f8d4428bbe94aed7ec7ae784/jdk-8u251-windows-x64.exe 觉得慢的话可以用txt里百度网盘下载,附件为网盘地址和提取码 jdk8 jdk-8u251-...

    jdk-8u25、jdk-8u111、jdk-8u131、jdk-8u181、jdk-8u201

    1. **Lambda表达式**:这是Java 8最重要的新特性之一,它使得函数式编程成为可能,允许开发者以更简洁的方式处理集合数据。 2. **方法引用和构造器引用**:与Lambda表达式紧密相关,方法引用允许直接引用已有方法,...

    jdk-8u171-linux-x64.rpm/jdk-8u171-linux-x64.tar.gz

    本主题涉及两个特定于Linux平台的JDK版本:jdk-8u171-linux-x64.rpm和jdk-8u171-linux-x64.tar.gz。这两个文件分别对应于两种不同的安装方式,适应于不同类型的Linux系统需求。 首先,`jdk-8u171-linux-x64.rpm`是...

    jdk8 java8 linux版 jdk-8u162-linux-x64.tar.zip

    1. **Lambda表达式**:这是一种简洁的匿名函数表示方式,简化了多参数、无副作用的函数式编程。 2. **默认方法**:在接口中添加了默认实现,允许接口扩展而不会破坏现有实现。 3. **Stream API**:提供了一种新的...

    jdk-8u381-windows-x64

    Java 8是Java的一个重要里程碑,它引入了许多新特性,包括lambda表达式、函数式编程接口、Stream API、日期与时间API的改进以及默认方法等,极大地提升了开发效率和代码可读性。 标签“jdk”进一步确认了这个压缩包...

    jdk-8u181-linux-x64-x86.rpm

    Java 1.8是一个重要的Java版本,它引入了许多新的特性和改进,比如Lambda表达式、函数式编程支持、Stream API、Date和Time API的改进以及更好的并发处理。 在文件名称列表中提到了"jdk-8u181-linux-x64.rpm",这是...

    jdk-8u152-windows-x64.zip

    4. **Stream API**:提供了一种处理集合的新方式,支持函数式编程,可以方便地进行数据过滤、映射和聚合操作。 5. **日期和时间API**:弃用了`java.util.Date`和`java.util.Calendar`,引入了新的`java.time`包,...

    jdk-8u172-windows-x64.exe、jdk-8u251-windows-x64.exe、jdk-14.0.1_windows-x64_bin.e

    它引入了多个新特性,包括 Lambda 表达式,这使得函数式编程风格在Java中成为可能。此外,还增加了Stream API,用于处理集合数据的新方式,以及Date和Time API的改进,提供了更强大的日期和时间处理功能。Java 8u172...

    jdk-8u151-windows-x64

    标签“jdk8”表明了这是Java 8系列的产品,它是Java语言的一个重大更新,引入了许多新特性,例如Lambda表达式、函数式接口、Stream API、新的日期与时间API(java.time包)、默认方法以及改进的类型推断等。...

    jdk-8u281-linux-x64.tar.gz.zip

    2.解压 tar -zxvf jdk-8u281-linux-x64.tar.gz 3.配置环境变量:vim /etc/profile 最后添加: export JAVA_HOME=/opt/jdk export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$...

    jdk-8u401-windows-x64.zip

    1. **Lambda表达式**:这是JDK 8最重要的特性之一,它引入了函数式编程的概念,使得代码更加简洁、可读性强。Lambda表达式允许将匿名函数作为方法参数传递,或者用作方法的返回值。 2. **方法引用和构造器引用**:...

    jdk-8u131-windows-x64

    Java 8是一个广泛使用的版本,引入了许多重要的新特性,如Lambda表达式、函数式编程接口、方法引用来提升代码的简洁性和可读性,以及日期时间API的改进等。 标签“java windows”表明该软件包是为在Windows操作系统...

    jdk8 jdk-8u211-windows-x64.rar

    2. **函数式接口**:为了支持lambda,Java 8引入了函数式接口的概念,这类接口只能包含一个抽象方法。`java.util.function`包中提供了大量预定义的函数式接口,如`Predicate`、`Function`和`Consumer`等。 3. **...

    jdk-8u401-windows-x64.exe

    标题中的"jdk-8u401-windows-x64.exe"指的是Java Development Kit(JDK)的8u401版本,专为64位Windows操作系统设计。JDK是Java编程语言的核心组件,包含了编译器、调试工具、运行环境等,使开发者能够在本地环境中...

    jdk-8u181-linux-x64.tar.gz

    Java 8是Oracle公司发布的一个重要版本,引入了许多新特性,如Lambda表达式、函数式编程、Stream API、Date和Time API的改进以及默认方法等。这些特性极大地增强了Java语言的简洁性和效率,使其更适合现代软件开发的...

    jdk-8u201-windows-x64.zip

    1. **Lambda表达式**:Lambda表达式是Java 8最显著的改变,允许程序员以更简洁的方式处理功能性接口,如Comparator或Runnable,使得函数式编程风格更容易实现。 2. **方法引用和构造器引用**:方法引用允许直接引用...

    java-jdk1.8-jdk-8u181-windows-x64.zip

    此外,还引入了方法引用来增强函数式编程能力。 2. **默认方法**:在接口中引入了默认方法,允许在不破坏向后兼容性的情况下添加新方法。 3. **新的日期和时间API**:Java 8提供了新的java.time包,替代了旧的...

    jdk8-jdk-8u121-linux-x64.tar.gz

    1. **Lambda表达式**:这是一种函数式编程概念,允许将代码作为数据处理。它简化了多线程编程,特别是在处理集合时。 2. **方法引用和构造器引用**:这些是与lambda表达式一起使用的语法特性,可以更简洁地引用现有...

    jdk-8u144-windows-x64.exe

    1. **Java语言特性**:如Lambda表达式,这是一种简洁的函数式编程语法,使得处理集合数据更加高效;方法引用来代替匿名内部类,使得代码更简洁。 2. **类型推断**:在编译器可以推断出局部变量类型的场合,允许省略...

    jdk-8u291-windows-x64

    1. **Lambda表达式**:引入了函数式编程的概念,使代码更加简洁、高效。Lambda允许将匿名函数作为参数传递,减少了对回调和内部类的依赖。 2. **方法引用和构造器引用**:提供了一种更直观的方式来引用已有方法或...

Global site tag (gtag.js) - Google Analytics