[jdk8] jdk8函数式编程思考

零、导读

(一)文章中心

我用jdk8已经半年多了,基本操作已经入门,但是jdk8魅力并非集合流以及线程等等,它要传输的更加是编程方式的改变,要知道像javascript是可以传递函数的,而在以前的jdk版本中,虽然可以但是并非十分的方便。现在官方已经可以通过传递行为的方式传递给函数,让编程中可以对一些基本的动作更加一步的抽象,而不需要写更多的重复代码。

文章中会提到常用的几个函数式接口,这几个接口无疑带来了很多方便。像之前用jdk8的时候写的第一篇文章《[jdk8]Lambda、JDK8接口使用、自定义函数接口》的时候还懵懵懂懂这个过程,所以这篇算是响应第一篇的使用了。

Continue reading “[jdk8] jdk8函数式编程思考”

[jdk8] jdk8 多线程处理的使用

github地址:https://github.com/WeidanLi/Java-jdk8-future

一、Future接口

Future是jdk5的时候被引入的,目的是为了把耗时的操作解放出来,可以同时使用多核的优势进行并行处理。比如,我有一个页面,需要从多方获取数据比如说从Twitter和Facebook获取数据,然后一起渲染的页面上。这时候如果等待Twitter的数据获取完在获取FB的数据,就显得比较慢了,这时候可以通过Future来让这两个任务并行处理。

Continue reading “[jdk8] jdk8 多线程处理的使用”

[jdk8]jdk8并行处理数据

一、简述

JDK8为了让处理大数据量集合更快速,使用了并行的形式来进行处理。在上面的例子中我们也看到了,如果我们需要一个并行流的话,只要对一个集合打开parallelStream即可。在JDK7以前,想要对一个集合进行并行处理似乎是一件困难的事情。所以这一篇文章我们可以看看JDK8是怎么实现并行处理的。

Continue reading “[jdk8]jdk8并行处理数据”

[jdk8]jdk8——流的收集器

之前写了JDK8集合流的入门以及筛选,也就是集合流使用的打开和中间操作。这次带来的是不同的收集数据的方式。

本节代码GitHub地址:https://github.com/WeidanLi/Java-jdk8-collect

一、准备:

还是老规矩,使用菜单进行示例。(代码的话建议拷贝这部分)

二、收集器简介

收集器即收集东西的容器,它用于使用集合流的时候的终端操作,即我们在日常的业务逻辑中把流进行过滤也好,进行筛选也好,然后我们总该要有一个容器可以存放这些过滤后的元素。这时候的收集器就派上用场了。如代码所示一个最简单的收集器的使用实例(当然我感觉平时应该没人这么无聊)

Continue reading “[jdk8]jdk8——流的收集器”

[jdk8]jdk8——流的筛选、查找、规约

一、准备

代码:https://github.com/WeidanLi/java-jdk8-stream2
在上一次的JDK8集合流中,讲了集合流的基本使用。这次,讲解集合流对集合的高级功能:
– 筛选、切片和匹配
– 查找、匹配和归约
– 使用数值范围等数值流
– 从多个源创建流
– 无限流。

Continue reading “[jdk8]jdk8——流的筛选、查找、规约”

[jdk8]jdk8——流的增强、流的中间操作以及终端操作

示例代码:https://github.com/WeidanLi/Javajdk8stream.git

零、准备

这一个部分,我们准备了菜单。包含菜单名字、是否是素食、卡路里数量以及菜单类型四个属性,使用了Lombok自动加入GETTER&SETTER这些元素。

package cn.liweidan.pojo;

import lombok.*;

/**
 * <p>Desciption:</p>
 * CreateTime : 2017/6/6 下午2:51
 * Author : Weidan
 * Version : V1.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@ToString
public class Dish {

    /** 名字 */
    private String name;
    /** 是否素食 */
    private boolean vegetarain;
    /** 卡路里 */
    private int colories;
    /** 类型 */
    private Type type;

    public enum Type {MEAT, FISH, OTHER};

}

并且准备了一些菜单。

package cn.liweidan.utils;

import cn.liweidan.pojo.Dish;

import java.util.Arrays;
import java.util.List;

/**
 * <p>Desciption:</p>
 * CreateTime : 2017/6/6 下午2:55
 * Author : Weidan
 * Version : V1.0
 */
public class DishUtils {

    public static List<Dish> getDishes(){
        return Arrays.asList(new Dish("pork", false, 800, Dish.Type.MEAT),
                new Dish("beef", false, 700, Dish.Type.MEAT),
                new Dish("chicken", false, 400, Dish.Type.MEAT),
                new Dish("french fries", true, 530, Dish.Type.OTHER),
                new Dish("rice", true, 350, Dish.Type.OTHER),
                new Dish("season fruit", true, 120, Dish.Type.OTHER),
                new Dish("pizza", true, 550, Dish.Type.OTHER),
                new Dish("prawns", false, 300, Dish.Type.FISH),
                new Dish("salmon", false, 450, Dish.Type.FISH));
    }

}

一、集合的处理

在jdk7以及以前,如果我们需要从一个集合中取出一个符合我们所需要条件的变量的时候,就需要去遍历这个元素中的每一个元素,然后使用if语句进行判断,如果符合我们所要的条件,就把这个元素放入另外一个集合中去。

Continue reading “[jdk8]jdk8——流的增强、流的中间操作以及终端操作”

[jdk8]Lambda、JDK8接口使用、自定义函数接口

简介

jdk8其实是个优秀的版本,在集合、线程、时间日期等API进行了增强,以及加入Lambda表达式的开发,jdk一直被误解为慢、卡,但是我相信随着开发者的进步,jdk将会变得越来越好。

jdk8学习的初衷:
– 提高系统效率
– 提高开发效率
– 函数式编程的应用
– 增强多线程编程

JDK8入门

JDK8默认最大的特性应该就是Lambda表达式了吧。先上线几个Lambda表达式进行体验一下。
代码我托管于GitHub社区:https://github.com/WeidanLi/Java-jdk8-demo

准备

为了测试,我们新建一个苹果,围绕着苹果开来展开需求的实现。苹果具有两个属性,一个颜色和一个重量。我们可以通过集合+我们自己的POJO类来实现。
实例是JDK8实战中的例子,如有侵犯,请告知删除。

Continue reading “[jdk8]Lambda、JDK8接口使用、自定义函数接口”