jdk 8 时区 转换_使用JDK 8将收藏转换为地图

jdk 8 时区 转换

我多次遇到这样的情况,希望将多个对象存储在Map中而不是Set或List中,因为将唯一标识信息的Map应用于对象有一些优势 。 Java 8通过流和Collectors.toMap(…)方法使翻译变得比以往更加容易。

使用Map而不是Set的一种有用情况是,当处理缺少或具有粗略的equals(Object)或hashCode()实现但具有唯一标识对象的字段的对象时。 在这些情况下,如果我无法添加或修复对象的基础实现,则可以通过使用类(键)的唯一标识字段到类的实例化对象(值)的Map来获得更好的唯一性保证。 当我更喜欢使用“ MapList或“ Set时,更常见的情况是需要通过特定的唯一标识字段查找集合中的项目。 在唯一标识键上进行映射查找的速度快,并且通常比依赖迭代和将每个对象的调用与equals(Object)方法进行比较要快得多。

使用JDK 8,从现有的ListSet构造Map变得比以往更加容易。 为了帮助说明这一点,将使用一个简单的Book类。 这Book类没有重载equals(Object)hashCode()Object类,因此是不恰当的类中使用Set或作为Map的关键。 但是,其getIsbn()方法返回一个国际标准书号 ,在本演示中,该书号被认为是唯一的。

Book.java

package dustin.examples.jdk8;/*** Represents a book, but does not override {@code equals(Object)}* or {@code hashCode()}.*/
public class Book
{/** International Standard Book Number (ISBN-13). */final String isbn;/** Title of book. */final String title;/** Edition of book. */final int edition;/*** Constructor.** @param newIsbn International Standard Book Number (-13).* @param newTitle Title.* @param newEdition Edition.*/public Book(final String newIsbn, final String newTitle, final int newEdition){isbn = newIsbn;title = newTitle;edition = newEdition;}/*** Provide ISBN-13 identifier associated with this book.** @return ISBN-13 identifier.*/public String getIsbn(){return isbn;}/*** Provide title of this book.** @return Book's title.*/public String getTitle(){return title;}/*** Provide edition of this book.** @return Book's edition.*/public int getEdition(){return edition;}@Overridepublic String toString(){return title + " (Edition " + edition + ") - ISBN-13: " + isbn;}
}

通过使用该类,演示类CollectionToMapDemo演示了使用JDK 8将各种Java集合类型( SetList甚至数组)转换为Map多么容易。

CollectionToMapDemo.java

package dustin.examples.jdk8;import static java.lang.System.out;import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;/*** Demonstrates conversion of Java collections to Java Maps.*/
public class CollectionToMapDemo
{/*** Multiple instances of Book, a class that lacks a proper* equals(Object) method, but for which its getIsbn() method* is assumed to return a unique identifier for each instance.*/private static final Book[] books;static{books = new Book[]{new Book("978-0-201-31005-4", "Effective Java", 1),new Book("978-0-321-35668-0", "Effective Java", 2),new Book("978-0-13-468599-1", "Effective Java", 3)};}/*** Convert provided array of Book instances to Map of each Book's ISBN to* that instance of the Book.* * @param booksArray Array of Book instances.* @return Map of each book's ISBN (key) to the book's full instance (value).*/private static Map<String, Book> convertArrayToMap(final Book[] booksArray){return Arrays.stream(books).collect(Collectors.toMap(Book::getIsbn, book -> book));}/*** Convert provided List of Book instances to Map of each Book's ISBN to* that instance of the Book.** @param booksList List of Book instances.* @return Map of each book's ISBN (key) to the book's full instance (value).*/private static Map<String, Book> convertListToMap(final List<Book> booksList){return booksList.stream().collect(Collectors.toMap(Book::getIsbn, book -> book));}/*** Convert provided Set of Book instances to Map of each Book's ISBN to* that instance of the Book.** @param booksSet Set of Book instances.* @return Map of each book's ISBN (key) to the book's full instance (value).*/private static Map<String, Book> convertSetToMap(final Set<Book> booksSet){return booksSet.stream().collect(Collectors.toMap(Book::getIsbn, book -> book));}public static void main(final String[] arguments){out.println("ARRAY->MAP:\n" + convertArrayToMap(books));final List<Book> booksList = Arrays.asList(books);out.println("LIST->MAP:\n" + convertListToMap(booksList));final Set<Book> booksSet= new HashSet<>(Arrays.stream(books).collect(Collectors.toSet()));out.println("SET->MAP:\n" + convertSetToMap(booksSet));}
}

刚显示的类列表中最重要的方法是convertArrayToMap(Book[])convertListToMap(List<Book>)convertSetToMap(Set<Book>) 。 一旦访问了基于基础SetList或array的流,所有这三种实现都是相同的。 在这三种情况下,仅需使用流的collect()方法之一(通常比顺序迭代更可取的归约运算符 ),然后将其传递给通过预定义的toMap( )提供的Collector接口的实现。 )来自Collectors类的Collector 。

接下来显示针对Book实例运行此演示类的输出:

ARRAY->MAP:
{978-0-201-31005-4=Effective Java (Edition 1) - ISBN-13: 978-0-201-31005-4, 978-0-321-35668-0=Effective Java (Edition 2) - ISBN-13: 978-0-321-35668-0, 978-0-13-468599-1=Effective Java (Edition 3) - ISBN-13: 978-0-13-468599-1}
LIST->MAP:
{978-0-201-31005-4=Effective Java (Edition 1) - ISBN-13: 978-0-201-31005-4, 978-0-321-35668-0=Effective Java (Edition 2) - ISBN-13: 978-0-321-35668-0, 978-0-13-468599-1=Effective Java (Edition 3) - ISBN-13: 978-0-13-468599-1}
SET->MAP:
{978-0-201-31005-4=Effective Java (Edition 1) - ISBN-13: 978-0-201-31005-4, 978-0-321-35668-0=Effective Java (Edition 2) - ISBN-13: 978-0-321-35668-0, 978-0-13-468599-1=Effective Java (Edition 3) - ISBN-13: 978-0-13-468599-1}

我遇到过几种情况,在这种情况下,在唯一标识符Map中包含多个对象到这些对象的完整实例是有利的,但是在SetList或数组中给了这些对象。 尽管在Java中将这些SetList和数组转换为Map从未特别困难,但在Java 8中进行这种转换比以往更加容易。

翻译自: https://www.javacodegeeks.com/2018/01/converting-collections-maps-jdk-8.html

jdk 8 时区 转换

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源备份软件 oracle,oracle备份和恢复

最好把所有表删掉重新导入&#xff0c;表字段改变不会还原出来 &#xff0c;只会还原数据1 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中exp system/managerTest filed:\DB_backup\GWAMQA_Oracle\GWAM_Dev_201410311059.dmp fully2 将数据库中system用…

c语言 方程改main的值_C语言编程笔记丨编写第一个C语言程序hello world,我教你哇...

如果用C语言输出&#xff1a;Hello&#xff0c;world&#xff01;&#xff0c;该如何编写程序&#xff1f;**代码如下&#xff1a;**#include//包含标准库的信息main()//定义名为main的函数&#xff0c;不接受参数值{//main函数的语句都放在花括号中&#xff0c;也表示函数体的…

iPhone 手机/苹果手机如何设置来电铃声?

文章目录方法一、使用 APP 库乐队设置方法二、使用第三方软件「爱思助手」设置方法一、使用 APP 库乐队设置 详见《iPhone 手机设置铃声简易教程》 方法二、使用第三方软件「爱思助手」设置 详见《苹果 iPhone 手机怎么设置铃声》

linux定时创建文件,linux下如何创建定时任务

文/PM回忆录本篇文章不详细讲述cron服务的那种配置文件&#xff0c;只是应用层面的讲解&#xff0c;只求初步的掌握。说到定时任务&#xff0c;不能不介绍下cron&#xff1a;一、cron定时任务是什么在LINUX中&#xff0c;周期执行的任务一般由cron这个守护进程来处理[ps -ef|gr…

连接堡垒机出现java环境_Java 8:长期支持的堡垒

连接堡垒机出现java环境斯蒂芬科尔本 &#xff08; Stephen Colebourne &#xff09;的文章“ Java 9可以使用六个星期 ”开始&#xff0c;“ Java 9仅仅六个星期就已经过时了。” Colebourne参考了Mark Reinhold博客文章“ Moving Java Forwarding Faster ”&#xff0c;并写道…

assertj断言异常_编写自定义的AssertJ断言

assertj断言异常AssertJ是广泛使用的Hamcrest匹配器的替代匹配库。 实际上&#xff0c;对于我自己的项目&#xff0c;我已经更改为仅使用AssertJ-我只是发现流畅的界面和可扩展性非常吸引人。 您可以编写自定义断言&#xff0c;如下所示&#xff1a; 想象一下一种具有强度和饮…

Unix 发展简史

1965年时&#xff0c;贝尔实验室&#xff08;Bell Labs&#xff09;加入一项由通用电气&#xff08;General Electric&#xff09;和麻省理工学院&#xff08;MIT&#xff09;合作的项目&#xff1b;该项目要建立一套多使用者、多任务、多层次&#xff08;multi-user、multi-ta…

linux服务器不会中毒,[转载]ubuntu 不会中毒的原因(转)

ubuntu不会中毒的原因不是因为linux用户少&#xff0c;而是其它原因。如下是转载的高手的文章&#xff1a;可能不少人持这样一种观点&#xff0c;认 为 Linux病毒少是因为Linux不像Windows那么普及&#xff0c;其实这种观点很早已经被人批驳过了&#xff0c;一个最有力的论据是…

6-7 使用函数输出水仙花数_「Java」再议printf函数

System.out.printf() 是在JDK1.5版开始引入的方法&#xff0c;即在JDK1.5以后的版本才可以使用此函数&#xff0c;printf 方法有 printf(String format, Object ... args) 和 printf(Locale l, String format, Object ... args) 两种重载方式。其实学过C语言的小伙伴应该会觉得…

Debian GNU/Linux 的发展简史

Debian 是最早的 Linux 发行版之一&#xff0c;由 Ian Murdock&#xff08;伊恩默多克&#xff09; 创立。lan Murdock 于1973年4 月28日出生于德国的君斯坦市(Konstanz, Germany)。他是Debian GNU/Linux 发行版的创始人&#xff0c;也是商用Linux发行商Progeny公司的创始人。他…

jdk 细粒度锁_使用JDK 8轻松进行细粒度排序

jdk 细粒度锁Java的8的推出流和有用的静态 / 默认的方法比较接口可以很容易地根据个人的领域两个对象比较“值&#xff0c;而不需要实现一个比较&#xff08;T&#xff0c;T&#xff09;在其对象的类方法被比较。 我将使用一个简单的Song类来帮助演示这一点&#xff0c;接下来…

c语言命名规则_C语言的基本数据类型及变量

学习目标了解C语言的基本数据类型了解变量的基本概念了解变量的使用方法了解了变量的命名方法了解格式占位符了解变量的输出了解C语言程序的基本数据类型及概念的使用方法擦在C语言编程中&#xff0c;系统定义了多种数据类型&#xff0c;本节将讲解基本数据类型的分类。基本数据…

linux socket默认超时时间设置,Socket中如何设置连接超时 (转)

Socket中如何设置连接超时 (转)Socket中如何设置连接超时AntGhazi/2001.12.14 主页&#xff1a;antghazi.yeah把CSDN与中文翻了底朝天&#xff0c;也没找到如何设置socket的连接超时的满意方法&#xff0c;问此问题的兄弟已有一大堆&#xff0c;这里偶就讲一下win下如何设置soc…

Linux 常用的软件包管理器/软件包管理工具详解

文章目录RPM 是什么&#xff1f;应用于哪些系统RPM 的前端工具有哪些RPM 包命名规范RPM 安装软件的默认路径RPM 安装原理图RPM 命令详解YUM 是什么&#xff1f;应用于哪些系统YUM 原理说明主要特点YUM 和 RPM 的区别YUM 命令详解DNF 是什么应用于哪些系统DNF 命令详解APT 是什么…

java world_Java World中的GraphQL简介

java world许多人认为GraphQL仅适用于前端和JavaScript&#xff0c;它在Java等后端技术中不占优势&#xff0c;但事实确实如此。 还经常将GraphQL与REST进行比较&#xff0c;但是这种比较是否合理&#xff1f; 首先&#xff0c;让我开始回答其中最重要的问题。 什么是GraphQL…

快速排序 动图_Java十大排序算法最强总结

看到一篇很不错的文章&#xff0c;不多说&#xff0c;看吧排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定&#xff1a;如果a原本在b前面&#xff0c;而ab&#xff0c;排序之后a仍然在b的前面&#xff1b;不稳定&#xff1a;如果a原本在b的前…

linux安装2870无线网卡,ubuntu15.04安装usb无线网卡

一般这种无线网卡都是联fake芯片&#xff0c;我使用的ralin(你懂的k)的usb无线1150 M。你去找lei凌官网找不到&#xff0c;只能去找芯片类型的制造者&#xff0c;所以只能去联Fake官网查询下载对应型号。1、我是这样子查看型号的&#xff0c;找到通过驱动软件检测并已经安装成功…

Linux 应用程序的源码包如何安装?

文章目录configuremakemake install关于文件 configure 的简单介绍其它命令简介C 语言开发的应用程序的源码包常以 .tar.gz 为扩展名&#xff0c;并且这些源码包通常使用 GNU 的 AUTOCONF 和 AUTOMAKE 生成编译配置文件&#xff0c;我们拿到这样的软件包后&#xff0c;执行下面…

exec su-exec_WildFly Kubernetes exec探针

exec su-exec活动性和就绪性探针会告诉Kubernetes&#xff0c;某个Pod是否正在运行并准备进行一些工作。 企业应用程序可以通过HTTP探测应用程序的状态。 如果没有暴露HTTP端点&#xff0c;Kubernetes也可以通过执行命令进行探测。 WildFly附带了有用的jboss-cli.sh 。 此CLI检…

feignclient注解使用_从 Feign 使用注意点到 RESTFUL 接口设计规范

最近项目中大量使用了Spring Cloud Feign来对接http接口&#xff0c;踩了不少坑&#xff0c;也产生了一些对RESTFUL接口设计的想法&#xff0c;特此一篇记录下。SpringMVC的请求参数绑定机制了解Feign历史的朋友会知道&#xff0c;Feign本身是Netflix的产品&#xff0c;Spring …