当前位置: 首页 > news >正文

网站说建设中西安seo优化排名

网站说建设中,西安seo优化排名,网站进行诊断,当今做啥网站能致富1. 介绍 在本教程中,我们将讨论Collectors类的toMap()方法。我们使用它将流收集到一个Map实例中。 对于本教程中涉及的所有示例,我们将使用图书列表作为数据源,并将其转换为不同的Map实现。 2. List 转换 Map 我们将从最简单的情况开始&a…

1. 介绍

在本教程中,我们将讨论Collectors类的toMap()方法。我们使用它将流收集到一个Map实例中。

对于本教程中涉及的所有示例,我们将使用图书列表作为数据源,并将其转换为不同的Map实现。

2. List 转换 Map

我们将从最简单的情况开始,将List 转换 Map

Book类定义如下:

class Book {private String name;private int releaseYear;private String isbn;//getters and setters
}

接着,我们将创建一个List<Book>来验证我们的代码:

List<Book> bookList = new ArrayList<>();
bookList.add(new Book("The Fellowship of the Ring", 1954, "0395489318"));
bookList.add(new Book("The Two Towers", 1954, "0345339711"));
bookList.add(new Book("The Return of the King", 1955, "0618129111"));

对于这个场景,我们将使用以下重载的toMap()方法:

Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper)

使用Collectors.toMap(), 我们将会得到一个Map<String,String>,其中key是isbn的值,value为name的值。

public Map<String, String> listToMap(List<Book> books) {return books.stream().collect(Collectors.toMap(Book::getIsbn, Book::getName));
}

我们使用单元测试来验证一下代码:

@Test
public void whenConvertFromListToMap() {assertTrue(convertToMap.listToMap(bookList).size() == 3);//true
}

3. 解决 Key 的冲突

上面的例子运行得很好,但是如果有一个重复的key会发生什么呢?

让我们来想象一下,我们将每本图书的出版年份作为key,转换到Map<Integer, Book>中。

public Map<Integer, Book> listToMapWithDupKeyError(List<Book> books) {return books.stream().collect(Collectors.toMap(Book::getReleaseYear, Function.identity()));
}

鉴于我们上面的例子,我们会看到一个IllegalStateException的异常:

@Test(expected = IllegalStateException.class)
public void whenMapHasDuplicateKey_without_merge_function_then_runtime_exception() {convertToMap.listToMapWithDupKeyError(bookList);
}

要解决这个问题,我们需要使用另一种toMap()方法,附加一个参数,mergeFunction:

Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction)

让我们引入一个merge函数,它表明,在发生冲突的情况下,我们保留现有的元素:

public Map<Integer, Book> listToMapWithDupKey(List<Book> books) {return books.stream().collect(Collectors.toMap(Book::getReleaseYear, Function.identity(),(existing, replacement) -> existing));
}

或者,换句话说,我们获得了未发生异常的元素:

@Test
public void whenMapHasDuplicateKeyThenMergeFunctionHandlesCollision() {Map<Integer, Book> booksByYear = convertToMap.listToMapWithDupKey(bookList);assertEquals(2, booksByYear.size());assertEquals("0395489318", booksByYear.get(1954).getIsbn());
}

4. 其他Map类型

默认情况下,toMap()方法将返回一个HashMap
但是我们也可以返回不同的Map实现。

Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction,Supplier<M> mapSupplier)

其中mapSupplier是一个函数,它返回一个新的、带有结果的空Map

4.1. List 转换 ConcurrentMap

让我们以上面的例子为例,添加一个mapSupplier函数来返回一个ConcurrentHashMap:

public Map<Integer, Book> listToConcurrentMap(List<Book> books) {return books.stream().collect(Collectors.toMap(Book::getReleaseYear, Function.identity(),(o1, o2) -> o1, ConcurrentHashMap::new));
}

下面我们测试一下

@Test
public void whenCreateConcurrentHashMap() {assertTrue(convertToMap.listToConcurrentMap(bookList) instanceof ConcurrentHashMap);
}

4.2. List 转换 SortedMap

最后,让我们看看如何返回一个排序后的Map。为此,我们需要对List<Book>进行排序,并使用TreeMap作为mapSupplier参数:

public TreeMap<String, Book> listToSortedMap(List<Book> books) {return books.stream() .sorted(Comparator.comparing(Book::getName)).collect(Collectors.toMap(Book::getName, Function.identity(), (o1, o2) -> o1, TreeMap::new));
}

上面的代码将List<Book>按照书名进行排序,然后将结果收集到TreeMap<String, Book>中:

@Test
public void whenMapisSorted() {assertTrue(convertToMap.listToSortedMap(bookList).firstKey().equals("The Fellowship of the Ring"));
}

5. 结论

在本文中,我们研究了Collectors类的toMap()方法。它允许我们从一个流创建一个新的Map。我们还学习了如何解决key冲突和创建不同的Map实现。

代码可以在GitHub中找到。

http://www.lbrq.cn/news/2524771.html

相关文章:

  • 手机网站设计资讯2022年最新新闻播报稿件
  • 公司网站代做什么是搜索引擎营销
  • wordpress笑话页面模板seo什么意思简单来说
  • 湘潭网站建设 尖端磐石网络seo查询网站是什么
  • 青岛北京网站建设公司哪家好免费手机网站建站平台
  • 商城网站建设最好的公司天津网站策划
  • 产品发布网站的装饰怎么做店铺推广渠道有哪些
  • 微信小程序推广赚佣金河南自助建站seo公司
  • 360做网站经常打骚扰电话百度关键词推广网站
  • 珠宝网站建设平台分析报告怎么注册一个网站
  • 马连洼网站建设谷歌ads
  • php动态网站开发 项目教程国际最新十大新闻事件
  • 百度生成手机网站站内优化主要从哪些方面进行
  • 个人网站模板源码论坛排名
  • 手机端网站如何做排名哪家竞价托管专业
  • 吉林省党风廉政建设官方网站重庆做优化的网络公司
  • 贵溪市城乡建设局网站地推推广平台
  • 西安软件开发公司百度seo软件曝光行者seo
  • 做性的网站有哪些哈尔滨seo整站优化
  • 免费网站建设制作视频音乐接单推广app平台
  • 网上学影视后期靠谱吗王通seo教程
  • 可以做设计兼职的网站有哪些工作可免费投放广告的平台
  • 政府网站策划书站长之家seo综合
  • 怎么做游戏和网站漏洞网络营销策划
  • 网站建设不力 被问责游戏代理加盟平台
  • 通州重庆网站建设免费大数据分析网站
  • 网站制作工资企业seo排名有 名
  • 网站设计外包合同百度搜索推广收费标准
  • 电子商务网站建设属性2022十大热点事件及评析
  • 乐清做网站建设公司哪家好seo搜索引擎是什么
  • 2023 年 NOI 最后一题题解
  • 关于神经网络CNN的搭建过程以及图像卷积的实现过程学习
  • 【C++算法】72.队列+宽搜_二叉树的最大宽度
  • 如何用命令行快速提取PPT中的所有图片?
  • CentOS安装ffmpeg并转码视频为mp4
  • 结合项目阐述 设计模式:单例、工厂、观察者、代理