jdk安装教程

我发现使用基于Java的应用程序时,装饰器和适配器有时会很有用。 这些“包装器”在各种情况下都可以很好地工作,并且相当容易理解和实现,但是当需要包装对象的层次结构而不是单个对象时,事情会变得有些棘手。 在这篇博客文章中,我研究了Java 8流如何使在对象集合和包装这些对象的对象集合之间转换变得更加容易。

在此讨论中,我将应用两个简单的Java类,分别表示Movie类和“包装”该类的类MovieWrapper 。 我在有关Java集合的JDK 8增强的文章中使用了Movie类。 接下来显示Movie类和包装它的类。

电影.java

package dustin.examples.jdk8.streams;import java.util.Objects;/*** Basic characteristics of a motion picture.** @author Dustin*/
public class Movie
{/** Title of movie. */private final String title;/** Year of movie's release. */private final int yearReleased;/** Movie genre. */private final Genre genre;/** MPAA Rating. */private final MpaaRating mpaaRating;/** imdb.com Rating. */private final int imdbTopRating;public Movie(final String newTitle, final int newYearReleased,final Genre newGenre, final MpaaRating newMpaaRating,final int newImdbTopRating){this.title = newTitle;this.yearReleased = newYearReleased;this.genre = newGenre;this.mpaaRating = newMpaaRating;this.imdbTopRating = newImdbTopRating;}public String getTitle(){return this.title;}public int getYearReleased(){return this.yearReleased;}public Genre getGenre(){return this.genre;}public MpaaRating getMpaaRating(){return this.mpaaRating;}public int getImdbTopRating(){return this.imdbTopRating;}@Overridepublic boolean equals(Object other){if (!(other instanceof Movie)){return false;}final Movie otherMovie = (Movie) other;return   Objects.equals(this.title, otherMovie.title)&& Objects.equals(this.yearReleased, otherMovie.yearReleased)&& Objects.equals(this.genre, otherMovie.genre)&& Objects.equals(this.mpaaRating, otherMovie.mpaaRating)&& Objects.equals(this.imdbTopRating, otherMovie.imdbTopRating);}@Overridepublic int hashCode(){return Objects.hash(this.title, this.yearReleased, this.genre, this.mpaaRating, this.imdbTopRating);}@Overridepublic String toString(){return "Movie: " + this.title + " (" + this.yearReleased + "), " + this.genre + ", " + this.mpaaRating + ", "+ this.imdbTopRating;}
}

MovieWrapper.java

package dustin.examples.jdk8.streams;/*** Wraps a movie like a Decorator or Adapter might.* * @author Dustin*/
public class MovieWrapper
{private Movie wrappedMovie;public MovieWrapper(final Movie newMovie){this.wrappedMovie = newMovie;}public Movie getWrappedMovie(){return this.wrappedMovie;}public void setWrappedMovie(final Movie newMovie){this.wrappedMovie = newMovie;}public String getTitle(){return this.wrappedMovie.getTitle();}public int getYearReleased(){return this.wrappedMovie.getYearReleased();}public Genre getGenre(){return this.wrappedMovie.getGenre();}public MpaaRating getMpaaRating(){return this.wrappedMovie.getMpaaRating();}public int getImdbTopRating(){return this.wrappedMovie.getImdbTopRating();}@Overridepublic String toString(){return this.wrappedMovie.toString();}
}

通过上面定义的MovieMovieWrapper类,我现在看一下将其中一个的集合转换为另一个的集合。 在JDK 8之前,将Movie对象的集合转换为MovieWrapper对象的集合的典型方法是迭代Movie对象的源集合,并将每个对象添加到MovieWrapper对象的新集合中。 下一个代码清单对此进行了演示。

将包装对象的集合转换为包装对象的集合

// movies previously defined as Set<Movie>
final Set<MovieWrapper> wrappedMovies1 = new HashSet<>();
for (final Movie movie : movies)
{wrappedMovies1.add(new MovieWrapper(movie));
}

使用JDK 8流,现在可以如下面的代码清单所示实现上述操作。

将包装对象的集合转换为包装对象的集合– JDK 8

// movies previously defined as Set<Movie>
final Set<MovieWrapper> wrappedMovies2 =movies.stream().map(movie -> new MovieWrapper(movie)).collect(Collectors.toSet());

可以类似地比较转换另一个方向(从包装对象的集合到包装对象的集合),以演示JDK 8如何改变这一方向。 接下来的两个代码清单显示了旧方法和JDK 8方法。

将包装对象的集合转换为包装对象的集合

final Set<Movie> newMovies1 = new HashSet();
for (final MovieWrapper wrappedMovie : wrappedMovies1)
{newMovies1.add(wrappedMovie.getWrappedMovie());
}

将包装对象的集合转换为包装对象的集合– JDK 8

final Set<Movie> newMovies2 =wrappedMovies2.stream().map(MovieWrapper::getWrappedMovie).collect(Collectors.toSet());

就像我在JDK 8中以流为动力的集合功能一文中的一些示例一样,本文中的示例演示了JDK 8中提供的聚合操作的强大功能。这些聚合操作相对于传统迭代的优势包括,代码的简洁性更高,可以说是(也许最终)更大的可读性,以及内部迭代的优势(包括更容易的潜在流支持的并行化)。 Java 8将转换对象转换为另一种类型,显示了使用流和更复杂的Function在不太相关的对象的集合之间进行转换的一个很好的示例。

翻译自: https://www.javacodegeeks.com/2015/02/using-jdk-8-streams-convert-collections-wrapped-objects-collections-wrapper-objects.html

jdk安装教程

jdk安装教程_使用JDK 8流在包装对象的集合和包装对象的集合之间转换相关推荐

  1. jdk安装教程_在JDK 12精简数字格式中使用最小分数数字

    jdk安装教程 帖子"紧凑数字格式出现在JDK 12中"演示了对JDK 12中NumberFormat的支持,以支持紧凑数字格式. 该帖子中显示的示例仅使用NumberFormat ...

  2. Linux的Jdk安装教程

    liunx下Jdk安装教程 1.创建jdk的安装目录(/usr/local/src) 确保安装的目录是空的,如果不是空的,删除一下,或者放在自己其他的目录也可以 mkdir -p /usr/local ...

  3. jdk安装教程及java环境配置(Win11)

    jdk安装教程Win11 请先前往官网下载jdk官方网站 将下载的JDK存放于本地硬盘,双击后开始安装,过程如下: 到这一步jdk的安装就结束了,在安装路径下有jdk1.8.0_162及jre1.8. ...

  4. JDK安装教程(有图详解)

    1.JDK安装教程 一.下载JDK 下载路径: 1.链接: https://www.oracle.com/java/technologies/downloads/. (https://www.orac ...

  5. JDK安装教程及环境变量设置

    JDK安装教程及环境变量设置 步骤1.安装JDK选择安装目录,安装过程中会出现两次安装提示.第一次是安装jdk,第二次是安装 jre.建议两个都安装在同一个java文件夹中的不同文件夹中.(不能都安装 ...

  6. Eclipse和JDK安装教程(22年8月)

    JDK和Eclipse安装教程 一.前言 二.下载软件 1.下载JDK 2.下载 Eclipse IDE 三.安装软件 1.安装JDK 安装程序版(JDK 8) 免安装版(JDK 11) 2.配置环境 ...

  7. JDK安装 + MyEclipse安装:JDK安装教程+MyEclipse安装教程(包含视频教程)

    jdk安装 + myeclipse安装:jdk安装教程+myeclipse安装教程: 1.JDK简介:java开发环境,包含JRE(java运行环境)+ 和java开发工具包. 2.MyEclipse ...

  8. Java详细安装教程--Java(jdk)安装

    Java详细安装教程–Java(jdk)安装 一.java历史简介 1991 年Sun公司的James Gosling等人开始开发名称为 Oak (橡树)的语言.希望用于控制嵌入在有线电视交换盒.PD ...

  9. 02Hadoop安装教程_单机、伪分布式配置

    02 Hadoop2.7 安装教程_单机.伪分布式配置 文章目录 **02** Hadoop2.7 安装教程_单机.伪分布式配置 **1.hadoop基础知识** 1.1 hadoop是什么? 1.2 ...

最新文章

  1. 2022斯坦福AI指数报告出炉!中国霸榜AI顶会,但引用量最低
  2. 强软弱虚引用,只有体会过了,才能记住
  3. js正则贪婪模式_JavaScript正则表达式迷你书之贪婪模式-学习笔记
  4. 贩卖知识的“成功学”,大师“卖拐”几时休?
  5. HTML DOM console.table() 方法
  6. GET和POST请求到底有什么区别?
  7. 微信小程序page设定css,微信小程序——启动,渲染与Page
  8. 【python】装饰器的练习题
  9. jQuery使table表格隔行显示不同颜色
  10. Java 将鼠标改为图片的两种方法
  11. 2021年校招,最值得加入的互联网公司有哪些?
  12. 硬盘分区工具找不到硬盘该怎么办
  13. 缠论中第49课:没必要参与操作级别及以上级别的下跌与超过操作级别的盘整,如何理解与应用?
  14. 阿拉伯数字与中文大写转换excel公式
  15. centos6如何配置ip
  16. 2023年全国最新工会考试精选真题及答案33
  17. 计算机在手机找不到了怎么办,手机找不到了怎么办 手机找不到了找回方法
  18. APP行业基准营销数据怎么获取?快用这两个免费应用数据工具
  19. lldb +debugserver调试环境部署
  20. 目标文件和可执行文件区别

热门文章

  1. Apache Spark 技术团队开源机器学习平台 MLflow
  2. C#中使用DateTimePicker控件显示修改日期时间
  3. apache一个ip多个端口虚拟主机
  4. 前端培训_backbone
  5. ubuntu 13.04 gnome terminal打开默认最大化方法
  6. 数学之美系列二 -- 谈谈中文分词
  7. 升级SharePoint数据库到SQL Server 2005的一点心得
  8. 最新maven插件的安装
  9. linux shell IFS分隔符 简介 IFS=$‘\n‘ 使用换行符做分隔符
  10. python文档生成工具 sphinx 简介