我一直落后于Java 8所关注的功能,因此在这篇文章中,我将简要介绍我对lambda和stream的初步经验。

和往常一样,我将专注于Podcast课程:

package org.codingpedia.learning.java.core;import java.util.Comparator;public class Podcast {int id;String title;String producer;int subscriptionsNumber;/** number of up votes(likes) */int upVotes;/** number of down votes*/int downVotes;public Podcast() {this.subscriptionsNumber = 0;}public Podcast(int id, String title, String producer, int subscriptionsNumber, int upVotes, int downVotes) {this.id = id;this.title = title;this.producer = producer;this.subscriptionsNumber = subscriptionsNumber;this.upVotes = upVotes;this.downVotes = downVotes;}public static final Comparator<Podcast> BY_POSITIVE_VOTES_DIFFERENCE =(left, right) -> (right.getUpVotes()-right.getDownVotes()) - (left.getUpVotes()-left.getDownVotes());@Overridepublic String toString() {return "Podcast{" +"title='" + title + '\'' +", producer='" + producer + '\'' +", upVotes=" + upVotes +", downVotes=" + downVotes +", subscriptionsNumber=" + subscriptionsNumber +'}';}public static String toJSON(Podcast p) {return "{" +"title:'" + p.title + '\'' +", producer:'" + p.producer + '\'' +", upVotes:" + p.upVotes +", downVotes:" + p.downVotes +", subscriptionsNumber:" + p.subscriptionsNumber +"}";}public int getUpVotes() {return upVotes;}public void setUpVotes(int upVotes) {this.upVotes = upVotes;}public int getDownVotes() {return downVotes;}public void setDownVotes(int downVotes) {this.downVotes = downVotes;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getProducer() {return producer;}public void setProducer(String producer) {this.producer = producer;}public int getSubscriptionsNumber() {return subscriptionsNumber;}public void setSubscriptionsNumber(int subscriptionsNumber) {this.subscriptionsNumber = subscriptionsNumber;}public int getId() {return id;}public void setId(int id) {this.id = id;}
}

我将在用lambda和流构建的不同操作中使用。 但是我这次让代码说明一切:

Lambda和流示例

package org.codingpedia.learning.java.core;import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;public class LambdasAndStreams {public static void main(String[] args) {List<Podcast> podcasts  = Arrays.asList(//new Podcast(podcastId, title, producer, subscriptionsNumber, upVotes, downVotes),new Podcast(1, "Quarks&Co", "wdr", 50, 18, 1),new Podcast(2, "Angeklickt - zum Mitnehmen", "wdr", 10, 5, 1),new Podcast(3, "Leonardo im WDR 5-Radio zum Mitnehmen", "wdr", 12, 10, 5),new Podcast(4, "L'ESPRIT PUBLIC", "France culture", 3, 10, 1),new Podcast(5, "LA FABRIQUE DE L'HISTOIRE", "France culture", 10, 4, 1),new Podcast(6, "LES MATINS DE FRANCE CULTURE", "France culture", 46, 12, 8));System.out.println("*********** Display initial podcasts with forEach ************");podcasts.forEach(podcast -> System.out.println(podcast));System.out.println("\n\n********************** Sorting with lambdas ***********************");// Sort by titleSystem.out.println("\n*********** Sort by title (default alphabetically) - highlight comparator ************");Collections.sort(podcasts, Comparator.comparing(Podcast::getTitle));podcasts.forEach(podcast -> System.out.println(podcast));System.out.println("\n*********** Sort by numbers of subscribers DESCENDING - highlight reversed ************");Collections.sort(podcasts, Comparator.comparing(Podcast::getSubscriptionsNumber).reversed());podcasts.forEach(podcast -> System.out.println(podcast));System.out.println("\n*********** Sort by producer and then by title - highlight composed conditions************");Collections.sort(podcasts, Comparator.comparing(Podcast::getProducer).thenComparing(Podcast::getTitle));podcasts.forEach(podcast -> System.out.println(podcast));System.out.println("\n*********** Sort by difference in positive votes DESCENDING ************");Collections.sort(podcasts, Podcast.BY_POSITIVE_VOTES_DIFFERENCE);podcasts.forEach(podcast -> System.out.println(podcast));System.out.println("\n\n******************** Streams *************************");System.out.println("\n*********** Filter podcasts with more than 21 subscribers - highlight filters ************");podcasts.stream().filter((podcast)-> podcast.getSubscriptionsNumber() >= 21).forEach((podcast)->System.out.println(podcast));System.out.println("\n********* Filter podcasts from producer with more than 21 subscribers - highlight predicate **************");Predicate<Podcast> hasManySubscribers = (podcast) -> podcast.getSubscriptionsNumber() >= 21;Predicate<Podcast> wdrProducer = (podcast) -> podcast.getProducer().equals("wdr");podcasts.stream().filter(hasManySubscribers.and(wdrProducer)).forEach((podcast) ->System.out.println(podcast));System.out.println("\n********* Display popular podcasts - highlight \"or\" in predicate **************");Predicate<Podcast> hasManyLikes = (podcast) -> (podcast.getUpVotes()-podcast.getDownVotes()) > 8;podcasts.stream().filter(hasManySubscribers.or(hasManyLikes)).forEach((podcast) ->System.out.println(podcast));System.out.println("\n********* Collect subscription numbers - highlight \"mapToInt\" **************");int numberOfSubscriptions = podcasts.stream().mapToInt(Podcast::getSubscriptionsNumber).sum();System.out.println("Number of all subscriptions : " + numberOfSubscriptions);System.out.println("\n********* Display podcast with most subscriptions -highlight \"map reduce\" capabilities **************");Podcast podcastWithMostSubscriptions;podcastWithMostSubscriptions = podcasts.stream().map(podcast -> new Podcast(podcast.getId(), podcast.getTitle(), podcast.getProducer(), podcast.getSubscriptionsNumber(), podcast.getUpVotes(), podcast.getDownVotes())).reduce(new Podcast(),(pod1, pod2) -> (pod1.getSubscriptionsNumber() > pod2.getSubscriptionsNumber()) ? pod1 : pod2);System.out.println(podcastWithMostSubscriptions);System.out.println("\n********* Display podcasts titles in XML format -highlight \"map reduce\" capabilities **************");String titlesInXml ="<podcasts data='titles'>" +podcasts.stream().map(podcast -> "<title>" + podcast.getTitle() + "</title>").reduce("", String::concat)+ "</podcasts>";System.out.println(titlesInXml);System.out.println("\n********* Display podcasts in JSON format -highlight \"map reduce\" capabilities **************");String json =podcasts.stream().map(Podcast::toJSON).reduce("[", (l, r) -> l + (l.equals("[") ? "" : ",") + r)+ "]";System.out.println(json);System.out.println("\n********* Display sorted podcasts by title in JSON format -highlight \"map collect\" capabilities **************");String jsonViaCollectors =podcasts.stream().sorted(Comparator.comparing(Podcast::getTitle)).map(Podcast::toJSON).collect(Collectors.joining(",", "[", "]"));System.out.println(jsonViaCollectors);System.out.println("\n********* Select first 3 podcasts with most subscribers -highlight \"map collect\" capabilities **************");List<Podcast> podcastsWithMostSubscribers = podcasts.stream().sorted(Comparator.comparing(Podcast::getSubscriptionsNumber).reversed()).limit(3).collect(Collectors.toList());System.out.println(podcastsWithMostSubscribers);System.out.println("\n********* Get podcasts grouped by producer -highlight \"collector\" capabilities **************");Map<String, List<Podcast>> podcastsByProducer = podcasts.stream().collect(Collectors.groupingBy(podcast -> podcast.getProducer()));System.out.println(podcastsByProducer);}
}

资源资源

  1. Java 8中央
  2. Java 8:Lambdas,第1部分
  3. Java 8:Lambdas,第2部分

翻译自: https://www.javacodegeeks.com/2015/03/yet-another-java-8-lamdbas-and-streams-example.html

另一个Java 8 Lamdbas和Streams示例相关推荐

  1. java8 streams_另一个Java 8 Lamdbas和Streams示例

    java8 streams 我一直落后于Java 8所关注的功能,因此在这篇文章中,我将简要介绍我对lambda和stream的初步经验. 和往常一样,我将专注于Podcast课程: package ...

  2. 第一个Java程序示例——Hello World

    跟随世界潮流,第一个Java程序输出"Hell World!". 通过Eclipse运行程序 启动Eclipse,在菜单中选择"文件 –> 新建 –> Jav ...

  3. 【每天一个java设计模式(完)】 - 四万字实现23种设计模式(附示例源码)

    什么是设计模式:[每天一个java设计模式(零)] - 设计模式基本概念及七大设计原则 创建型模式 工厂模式:[每天一个java设计模式(一)] - 工厂模式 抽象工厂模式: [每天一个java设计模 ...

  4. java组合与继承始示例_Java 9功能与示例

    java组合与继承始示例 Java 9 is a major release and it has brought us a lot of features for developers. In th ...

  5. 10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...

  6. 在docker中构建普通java程序_Docker入门-构建第一个Java程序

    原标题:Docker入门-构建第一个Java程序 定制镜像 准备一个没有第三方依赖的java web项目,可能参考示例maven结构项目: session-web.war 把该war上传到安装有doc ...

  7. java的应用程序开发_开发一个Java应用程序(1)

    开发一个Java应用程序(1) App Engine上的Java Web应用程序通过Java Servlet标准接口与应用程序服务器交互.一个应用程序由一个或多个类组成,这些类都扩展自一个servle ...

  8. apache ignite_Apache Ignite变得简单:第一个Java应用程序

    apache ignite 在本文中,我们将更进一步,让您完成第一个Ignite应用程序的创建,以从分布式缓存中进行读写操作. 作为第一个示例,我们将尽可能简单地向您展示如何用Java编写用于处理Ap ...

  9. java gradle入门_Gradle入门:我们的第一个Java项目

    java gradle入门 这篇博客文章描述了如何使用Gradle编译和打包一个简单的Java项目. 我们的Java项目只有一个要求: 我们的构建脚本必须创建一个可执行的jar文件. 换句话说,我们必 ...

最新文章

  1. Django 模型成员2.2
  2. ie不再询问加载java_fireFox IE刷新不提示
  3. 线性表的链式表示——双链表
  4. 用另一种方式来讲解代理模式~
  5. 自动化运维之kickstart自动化部署安装操作系统
  6. 打造个人电脑安全终极防线
  7. 中国移动2020校招应聘攻略—笔试篇
  8. XGBoost结合SHAP应用:回归、二分类、多分类模型
  9. 实践系列:分销平台的技术架构
  10. 2-2 nginx整体结构
  11. WPF(C#)桌面UI控件库推荐:Newbeecoder.UI-NbGroupBox使用
  12. pycharm怎么设置根目录?
  13. threejs特效:选中效果
  14. App自动化测试怎么做?实战分享App自动化测试全流程
  15. HTML基础 结构,标题h1和段落p 写一个三毛语录
  16. 布洛芬成功史:研发10年因一次宿醉迎来转机,发明人3年前已去世
  17. FinalShell 远程工具(即xshell,xftp,远程桌面连接一体)
  18. 斯坦福大学开发PETE装置吸收60%的太阳能
  19. shell屏蔽错误和警告输出
  20. 凸优化笔记(1) —— 基本概念

热门文章

  1. 多功能语音播放器上线啦~
  2. SpringBoot+Vue博客系统---后端接口开发
  3. JDBC8.0 URL配置
  4. cmw500综合测试仪使用_山西优质三相直流电阻测试仪图片-南电合创
  5. tomcatSupplement(1)tomcat启动脚本分析(以Windows平台为例)
  6. 对于高并发的理解及实践方案
  7. POJ3278(BFS)
  8. spring序列化_使用@JsonIdentityInfo的Spring自定义序列化器
  9. 子类重写父类变量_为什么在子类中不重写超类的实例变量
  10. javascript 解密_Javascript中的AES加密和Java中的解密