`
Cwind
  • 浏览: 265771 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
793bb7df-a2a9-312d-8cb8-b66c3af482d1
LeetCode题解
浏览量:53671
社区版块
存档分类
最新评论

Java 8 Stream API 实战

    博客分类:
  • Java
阅读更多

谈起Java Stream API,我们希望能够弄明白它究竟是什么,能够用来做什么,有什么优势,并能够应用于具体场景。分别简述如下。

 

不是什么

  • Java Stream API 不是输入输出流,与java.io包里的InputStream和OutputStream概念完全不同
  • 不是用于解析XML的XMLStream
  • 不是Valve公司的游戏平台
  • 也不是集合元素,不是数据结构不保存数据

是什么

  • 是Java 8 中引入的新特性,是对集合(Collection)对象功能的增强
  • 是关于算法和计算的,更像一个高级版本的迭代器(Iterator)

能够用来做什么

用于对集合对象进行各种便利、高效的聚合操作,或大批量数据操作

 

有何优势

以往对于集合的聚合操作,需要使用Iterator遍历集合,代码繁冗;对于过滤和计算得到的中间结果,需要额外的空间进行存储
Java Stream API解决了以上问题,遍历逻辑可以精简为一行,使得代码更加简洁易读。
Java Stream提供串行和并行两种模式进行汇聚操作,能够充分利用多核处理器的优势,更方便写出高性能的并发程序且不易出错

 

典型应用场景

StreamAPIDemo
定义商品对象并初始化购物清单如下:

 

public class StreamAPIDemo {

    private List<Item> shoppingList;

    @Before
    public void setUp() throws Exception {
        shoppingList = Lists.newArrayList();
        shoppingList.add(new Item("iPhone 7", 7250L));
        shoppingList.add(new Item("Rolex Watch", 28888L));
        shoppingList.add(new Item("Electric Toothbrush", 388L));
        shoppingList.add(new Item("Kindle Paperwhite", 1098L));
        shoppingList.add(new Item("Coca Cola", 3L));
    }
    class Item {
        String itemName;
        long price;

        public Item(String itemName, long price) {
            this.itemName = itemName;
            this.price = price;
        }
    }
}

 

集合遍历

 

// 打印购物清单
    @Test
    public void printShoppingList(){
        shoppingList.stream().forEach(System.out::println);
    }

输出:

 

 

Item{itemName='iPhone 7', price=7250}
Item{itemName='Rolex Watch', price=28888}
Item{itemName='Electric Toothbrush', price=388}
Item{itemName='Kindle Paperwhite', price=1098}
Item{itemName='Coca Cola', price=3}

 

 

数学统计

 

// 统计购物清单总数与总价
    @Test
    public void printTotalPrice() {
        long itemNum = shoppingList.stream().count();
        System.out.println("Sum of items in the shopping list: " + itemNum);

        long totalPrice = shoppingList.stream().collect(Collectors.summingLong(Item::getPrice));
        System.out.println("Total price: " + totalPrice);
    }

输出:

 

 

Sum of items in the shopping list: 5
Total price: 37627

 

过滤与排序

 

// 过滤价格小于1000的商品
    @Test
    public void filterItems(){
        shoppingList.stream().filter(p -> p.getPrice() >= 1000L).forEach(System.out::println);
    }

    // 按价格排序
    @Test
    public void sortItemsByPrice(){
        shoppingList.stream().sorted(Comparator.comparingLong(Item::getPrice)).forEach(System.out::println);
    }

 

MapReduce(映射与规约)

// 所有商品价格减100 - Map
    @Test
    public void streamMap(){
        shoppingList.stream().map(p -> new Item(p.getItemName(), p.getPrice()-100)).forEach(System.out::println);
    }

 

 

// 取出如上优惠之后金额超过1000元的商品中,价格最低的商品(最便宜的奢侈品)
    @Test
    public void streamReduce(){
        Item cheapestLuxury = shoppingList.stream().map(p -> new Item(p.getItemName(), p.getPrice()-100))
            .filter(p -> p.getPrice() > 1000).reduce((a, b) -> a.getPrice()<b.getPrice()?a:b).get();
        System.out.println(cheapestLuxury);
    }

 Original Link

参考

 

 

 

 

 

 

 

1
0
分享到:
评论

相关推荐

    面向对象大胆向前 Java API 实战-Markdown格式的笔记

    **Java API实战笔记概述** Java API是Java开发的核心部分,包含了大量的类库和接口,用于构建各种类型的应用程序。这份面向对象大胆向前的Java API实战笔记涵盖了从基础API到高级特性的广泛主题,旨在帮助开发者...

    Java+8实战_Java8_java8_

    以上只是Java 8中部分重要特性,实际的“Java+8实战”书籍可能会涵盖更多细节,如如何使用新的日期和时间API进行日期计算、如何利用流API进行复杂的数据处理,以及如何有效地使用lambda和函数式接口进行函数式编程。...

    Java Stream 实战用法 demo源码(下载即可run)

    基于java8,方便,快捷的Stream API常见使用场景实战

    java8Stream方法简介-源码.rar

    Java 8引入了一种新的集合处理方式,那就是Stream API,它极大地改变了我们处理集合数据的方式,使得代码更加简洁、高效且易于理解。Stream API是Java 8中的一个核心特性,它提供了一种声明式编程风格,可以用于大量...

    Stream_Java8.pdf

    根据提供的文件信息,本文将详细介绍Java 8中Stream API的核心概念、使用方法及其实战案例。Stream API作为Java 8的重要特性之一,极大地简化了集合处理的代码编写过程,提升了程序的可读性和效率。 ### Stream概述...

    实用的 Java 8 Stream 代码

    Java 8 是一个重要的 Java 发行版本,引入了许多新特性,其中最为显著的就是 Stream API。Stream API 提供了一种全新的处理数据的方式,使得在集合、数组等数据源上的操作更加简洁、高效。在这个主题中,我们将深入...

    Java基础精品课23-StreamApi.zip

    本课程“Java基础精品课23-StreamApi”将深入探讨这一核心概念。 一、Stream API概述 Stream API是Java 8中的一个新接口,位于java.util.stream包下,它提供了对大量数据进行操作的方法,如过滤、映射、聚合等。...

    Java 并发编程实战.pdf

    在《Java并发编程实战》中,读者也能够了解到如何将并发与现代Java语言特性结合起来,例如使用Lambda表达式和Stream API来简化并发代码的编写。 综合来看,该书不仅适合于对Java并发编程感兴趣的初学者,同样也适合...

    java 8实战

    java 8实战 lambda表达式,Stream API,函数式编程,Optional,时间API

    java8讲义与实战全篇

    在"java8讲义与实战全篇"中,我们将会深入探讨以下几个核心知识点: 1. **函数式编程**:Java 8引入了Lambda表达式,这是对函数式编程的一种支持。Lambda允许我们将函数作为参数传递给方法,或者将函数作为方法的...

    互联网软件开发-java开发程序员-java8开发实战pdf文档

    2. **Stream API**:Stream API是Java 8中的另一个亮点,它提供了一种新的数据处理方式,可以对集合进行序列化操作,支持并行处理,极大提高了数据处理性能。通过`stream()`方法,我们可以对集合进行过滤、映射、...

    Java系列丛书之五 Java语言API类库.rar

    14. **Java SE 8及以后的新特性**:包括Lambda表达式、Stream API、Optional类等,提升了代码的简洁性和可读性。 通过阅读"Java系列丛书之五 Java语言API类库",读者不仅可以了解这些API的基本用法,还能学习到如何...

    java源代码项目实战示例

    最后,Java还支持许多高级特性,如Lambda表达式、Optional类、Stream API等。在实战示例中,我们可以看到这些现代特性的实际应用,提高代码的简洁性和可读性。 通过这个"Java源代码项目实战示例",学习者可以将理论...

    java8stream源码-Java8:Java8

    java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:...

    java8stream源码-java8:java8

    java8流源码Java8InAction 该存储库包含 Java 8 实战:Lambdas、Streams 和函数式编程一书中示例和测验的所有源代码。 您可以在这里购买这本书:或在亚马逊上 所有示例的源代码都可以在目录中找到 第 1 章:Java 8:...

    java8实战课程笔记

    2. **Stream API**:Stream API是Java 8中的新特性,提供了一种对数据进行聚合操作的新方式。通过`stream()`方法,我们可以对集合进行过滤、映射、分组、排序等操作,同时支持并行流,提升性能。 3. **默认方法**:...

    Java 8 实战教程整理

    这个实战教程旨在帮助开发者深入理解和掌握Java 8的关键功能,包括函数式编程、日期时间API、流(Stream)API以及默认方法等。 1. 函数式编程:Java 8引入了Lambda表达式,这是一种简洁的匿名函数表示法,使得Java...

Global site tag (gtag.js) - Google Analytics