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 时区 转换

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

  1. jdk 8 时区 转换_JDK 8 BigInteger精确缩小转换方法

    jdk 8 时区 转换 在博客文章" Java中Long到Int的精确转换 "中,我讨论了使用Math.toIntExact(Long)将Long精确地转换为int或者如果无法缩小 ...

  2. 高级JAVA开发必备技能:时区的规则发生变化时,如何同步JDK的时区规则(实战方案,建议收藏)

    技术活,该赏 点赞,收藏再看,养成习惯 场景 服务器安装JDK时,默认会有支持JDK版本对应的时区规则.但是时区规则可能会变化的,那如何保持时区规则是最新的呢? TZUpdater 工具介绍 ​ 提供 ...

  3. python时区转换_在python 不同时区之间的差值与转换方法

    之前有个程序,里面有个时间部分是按照国内时区,也就是东八区,来写的,程序中定义了北京时间2点到八点进行检查:后面程序在国外机器上,例如说韩国,欧美等,执行的时候发现会有时间上的问题,因为获取的是机器的 ...

  4. 使用JDK 8将收藏转换为地图

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

  5. 开源3d模型格式转换_将您的开源业务转换为基于收入的模型时应考虑的因素

    开源3d模型格式转换 是否可以通过一组简单的正式语言转换规则将SQL作为一种语言集成并标准化到Java中? 是的,它可以. 当总部位于瑞士苏黎世的开源公司启动名为jOOQ的新数据库抽象软件项目时, D ...

  6. 深思4加密狗有驱无驱转换_可以将内部无线适配器转换为加密狗吗?

    深思4加密狗有驱无驱转换 If you hate seeing good electronic parts go to waste, then you likely look for ways to ...

  7. 将mysql日期格式转换_如何将日期时间格式转换为mysql日期格式?

    I have a textbox in which i take date input from user. But I can't save that date to my db as it sho ...

  8. javastring转long的方法_被JDK坑的没商量?来试试这些方法吧

    前言 jdk作为我们每天必备的调用类库,里面大量提供了基础类供我们使用.可以说离开jdk,我们的java代码寸步难行,jdk带给我们的便利可谓是不胜枚举,但同时这些方法在使用起来也存在一些坑,如果不注 ...

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

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

最新文章

  1. python使用界面-(八)Python 图形化界面设计
  2. python导入模块报错_Python 导入上层目录模块报错
  3. vb四则运算计算机,怎么用VB做简易的四则运算计算器
  4. Yii2性能优化之:缓存依赖
  5. python多线程图像识别_Python 多线程抓取图片效率对比
  6. 终结者:log4j的真正正确使用方式
  7. Java探索之旅(18)——多线程(2)
  8. 欧几里得算法求最大公约数,最小公倍数
  9. 汇编语言相关图书推荐
  10. 如何基于FastReport报表工具,生成报表PDF文档展示医院处方笺的内容
  11. xp任务栏一直闪跳怎么办_电脑的任务栏在不停闪烁,这个是什么问题引起的
  12. 官网Tomcat下载方法
  13. C语言文本文档汉字乱码处理问题
  14. react —— 解决报错之 Objects are not valid as a React child (found: [object HTMLDivElement]). If you meant
  15. 数据结构学习(冒泡、选择、插入、快速排序)
  16. python羊车门问题_羊车门作业 Python版
  17. HTML和CSS实现京东首页(附GitHub地址)
  18. java获取当前时间和求时间差(分钟,秒钟,小时,年等)
  19. 新产品Digi XBee RR无线模块迁移指南
  20. 如何真正从零开始学习Python

热门文章

  1. 【无码专区13】最小公倍数(线段树)
  2. 剪纸游戏(博弈论)(SG函数)
  3. AT4378-[AGC027D]ModuloMatrix【构造】
  4. jzoj1013-GCD与LCM【数论】
  5. codeforces1437 E. Make It Increasing——最长上升子序列
  6. 动态规划训练25 [Food Delivery ZOJ - 3469 ]好题
  7. Spring @Import注解配置类方法内部调用没有注入属性值的坑
  8. Linux运维常用检查网络工具
  9. Oracle入门(十四.11)之使用显式游标属性
  10. 阿里Druid连接池监控的两个坑