• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

用Java8 stream处理数据

java 搞代码 4年前 (2022-01-09) 18次浏览 已收录 0个评论
文章目录[隐藏]

1、stream处理数据介绍

如果没有集合Collection你如何处理数据?几乎所有的Java应用程序都要使用Collection处理数据。他们是十分重要的编程工作:例如,您可能想要创建银行交易的集合Collection,这个集合代表客户的状态。然后,你可能要处理整个集合来找出的顾客花了多少钱。尽管集合如此重要,但是在Java中处理集合的技术还远远不够完善。

首先,对集合的典型处理模式是类似SQL操作,比如”finding“(例如,找到具有最高价的交易)或”grouping” (例如,将相关的杂物所有交易合并组) 。大多数数据库让您这样的声明方式指定的操作。例如,下面的SQL查询可以让您找到交易ID最高值: “SELECT id, MAX(value) from transactions” 。

正如你所看到的,我们并不需要实现如何具体计算最大值(例如,使用循环和一个变量来跟踪的最高值) 。我们只能表达我们所期望的要求(获得最大值)。只要我们显式发出这样的查询,数据库就会为我们去处理。可是为什么我们不能在集合Collection中实现类似的东西?多少次,你会发现自己使用循环一遍又一遍的反复遍历集合?(如:for Object o: myLists{ ..})

其次,如何才能有效地处理真正的大数据集合?在理想的情况下,你想利用多核架构加快处理,。然而,编写并行代码很难而且容易出错。

Java 8 API的设计者重新提出了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。此外,数据流可以充分利用多核架构而无需编写多线程的一行代码。这听起来不错,不是吗?

首先,我们看看在Java 7中,如何发现typegrocery 的所有交易,然后返回以交易值降序排序好的交易ID集合?

List<Transaction> groceryTransactions = new Arraylist<>();

for(Transaction t: transactions){

  if(t.getType() == Transaction.GROCERY){

    groceryTransactions.add(t);

  }

}

Collections.sort(groceryTransactions, new Comparator(){

  public int compare(Transaction t1, Transaction t2){

    return t2.getValue().compareTo(t1.getValue());

  }

});

List<Int<i style="color:transparent">本文来源gaodai$ma#com搞$代*码*网(</i>eger> transactionIds = new ArrayList<>();

for(Transaction t: groceryTransactions){

  transactionsIds.add(t.getId());

}

而在Java 8使用Stream:

List<Integer> transactionsIds =

    transactions.stream()

                .filter(t -> t.getType() == Transaction.GROCERY)

                .sorted(comparing(Transaction::getValue).reversed())

                .map(Transaction::getId)

                .collect(toList());

我们首先从交易数据列表中获得一个stream对象,这是通过使用Liststream()方法实现的,下一步几个操作 (filter, sorted, map, collect)是以链式排列成一个管道,形成对数据的查询操作。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:用Java8 stream处理数据

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址