java8学习-流入门

1.定义

流指的是一系列的数据项,每次只处理一项。所谓流处理是指从输入流中一个一个的读取数据,然后再写入到输出流中。

2.java体现

在java8中我们可以通过stream接口来实现流处理。当然,stream的主要作用对象是java的集合,在java中,它可以被当成是一个遍历数据集的高级迭代器。

 

下面是一个简单的例子,以比较流和传统表达式的区别:

 

package java8.stream.base;

 

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils;

import org.junit.jupiter.api.Test;

 

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.stream.Collectors;

 

/**

 * 对菜单里面的菜肴进行排序

 */

public class OrderByCalorie {

    /**

     * java7的实现版本,获取热烈从高到底的菜的名称

     */

    @Test

    public void java7Edition(){

        List<Dish> dishList = new ArrayList<>();

        assembleList(dishList);

        Collections.sort(dishList, new Comparator<Dish>() {

            @Override

            /**

             * o1是前一个对象,o2是后一个对象,方法返回值为1时两个对象才会交换位置

             */

            public int compare(Dish o1, Dish o2) {

                return Integer.compare(o2.calorie,o1.calorie);

            }

        });

        List<String> nameList = new ArrayList<>();

        for (Dish dish:dishList){

            nameList.add(dish.getName());

        }

        for (String name:nameList){

            System.out.println(name);

        }

    }

    @Test

    public void java8Edition(){

        List<Dish> dishList = new ArrayList<>();

        assembleList(dishList);

        //利用流处理机制直接完成所有操作(单线程版本)

        List<String> nameList = dishList

                .stream()

                .sorted(Comparator.comparing(Dish::getCalorie).reversed())

                .map(Dish::getName)

                .collect(Collectors.toList());

        //多线程版本

        List<String> nameListNew = dishList

                //流化

                .parallelStream()

                //排序

                .sorted(Comparator.comparing(Dish::getCalorie))

                //提取名称

                .map(Dish::getName)

                //转换为集合

                .collect(Collectors.toList());

        nameList.forEach(System.out::println);

        System.out.println();

        nameListNew.forEach(System.out::println);

    }

 

    private void assembleList(List<Dish> dishList){

        dishList.add(new Dish("水煮肉片",500));

        dishList.add(new Dish("红烧排骨",600));

        dishList.add(new Dish("番茄操蛋",250));

        dishList.add(new Dish("红烧肉",800));

    }

 

    class Dish{

        private String name;

        private int calorie;

        public Dish(String name,int calorie){

            this.name = name;

            this.calorie = calorie;

        }

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        public int getCalorie() {

            return calorie;

        }

        public void setCalorie(int calorie) {

            this.calorie = calorie;

        }

    }

}

 

 

总的来说,流不仅能帮助我们快速的遍历并操作集合,还能帮助我们去方便快捷的利用计算机的所有内核,不用再让我们去写复杂的多线程代码。使用它,我们能轻易的写出更简洁灵活、更易读、性能更好的代码。以上只是流的入门。

PS:上面的例子来源于java 8 in action。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值