成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起聊聊 Java Steam 常用 API

開(kāi)發(fā) 前端
現(xiàn)在 Java 17 和 Java 11 基本上可以和 Java8 平分 JDK 裝機(jī)比例。下面是我常用的一些 Strem API 操作。除了分組、轉(zhuǎn)換、排序,如果大家還有更多常用的 API 可以一起留言交流。 分組

現(xiàn)在 Java 17 和 Java 11 基本上可以和 Java8 平分 JDK 裝機(jī)比例。下面是我常用的一些 Strem API 操作。除了分組、轉(zhuǎn)換、排序,如果大家還有更多常用的 API 可以一起留言交流。

分組

List 默認(rèn)分組過(guò)后是 Map<Key, List>

List<StreamItem> streamList = Stream.of(
        new StreamItem(1, "k1"),
        new StreamItem(2, "k1"),
        new StreamItem(3, "k2"),
        new StreamItem(4, "k2")).collect(Collectors.toList());
System.out.println(streamList);
//1.1分組
Map<String, List<StreamItem>> streamMap1 = streamList.stream().collect(Collectors.groupingBy(StreamItem::getKey));
System.out.println(streamMap1);

//輸出:
{k1=[StreamItem{id=1, key='k1', name='i_1|k_k1'}, StreamItem{id=2, key='k1', name='i_2|k_k1'}], k2=[StreamItem{id=3, key='k2', name='i_3|k_k2'}, StreamItem{id=4, key='k2', name='i_4|k_k2'}]}

List 默認(rèn)分組過(guò)后是 Map<Key, Object>

//1.2分組只拿第一個(gè)
Map<String, StreamItem> streamMap2 = Stream.of(
        new StreamItem(1, "k1"),
        new StreamItem(2, "k2")).collect(Collectors.toMap(StreamItem::getKey, Function.identity()));
//如果 key 重復(fù)報(bào): java.lang.IllegalStateException: Duplicate key
System.out.println(streamMap2);

//輸出:
{k1=StreamItem{id=1, key='k1', name='i_1|k_k1'}, k2=StreamItem{id=2, key='k2', name='i_2|k_k2'}}

分組,在組內(nèi)排序然后獲取最大值,或者最小值

Comparator<StreamItem> idComparator =Comparator.comparing(StreamItem::getId);
Map<String, Optional<StreamItem>> streamMap3 = streamList.stream().collect(Collectors.groupingBy(StreamItem::getKey,
                                                                Collectors.reducing(BinaryOperator.maxBy(idComparator))));
System.out.println(streamMap3);

//輸出
{k1=Optional[StreamItem{id=2, key='k1', name='i_2|k_k1'}], k2=Optional[StreamItem{id=4, key='k2', name='i_4|k_k2'}]}

List 轉(zhuǎn)換為 List

這個(gè)也是超級(jí)實(shí)用的 api

List<List<StreamItem>> partitionList = Lists.partition(streamList, 2);
List<StreamItem> streamList1 = partitionList.stream().flatMap(Collection::stream).collect(Collectors.toList());
System.out.println(streamList1);
//輸出
[StreamItem{id=1, key='k1', name='i_1|k_k1'}, StreamItem{id=2, key='k1', name='i_2|k_k1'}, StreamItem{id=3, key='k2', name='i_3|k_k2'}, StreamItem{id=4, key='k2', name='i_4|k_k2'}]

排序

排序,默認(rèn)正序,如果是需要倒序,可以在comparing 方法后面再調(diào)用 reversed 方法

//3.1 正序
List<StreamItem> streamList2 = Stream.of(
    new StreamItem(3, "k1"),
    new StreamItem(1, "k1"),
    new StreamItem(2, "k2"))
//倒序:Comparator.comparing(StreamItem::getId).reversed()
.sorted(Comparator.comparing(StreamItem::getId)).collect(Collectors.toList());
System.out.println(streamList2);

去重

去重復(fù)后,保留最后寫(xiě)入的值

//4.1 去重復(fù)
List<StreamItem> streamList3 = Stream.of(
    new StreamItem(3, "k1"),
    new StreamItem(1, "k1"),
    new StreamItem(2, "k2"))
//如果只需要保留最大的 id 的值,就可以先排序, 時(shí)間復(fù)雜度考了個(gè)人覺(jué)得實(shí)用 group 更優(yōu)
.sorted(Comparator.comparing(StreamItem::getId).reversed())
.collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
                                                              //利用 set 特征去重
                                                              new TreeSet<>(Comparator.comparing(StreamItem::getKey))), ArrayList::new));
System.out.println(streamList3);
//輸出:
[StreamItem{id=3, key='k1', name='i_3|k_k1'}, StreamItem{id=2, key='k2', name='i_2|k_k2'}]

其他常用 API

  • filter(按照條件過(guò)濾需要數(shù)據(jù))
  • max(取出流中的最大值)
  • min(取出流中的最小值)
  • count(取出流中的數(shù)量)
  • sum(取出流中數(shù)據(jù)的和)
  • average(取出流中數(shù)據(jù)的平均值)
  • distinct(將流中的數(shù)據(jù)去重)
  • sorted(自然排序,默認(rèn)為升序,可以設(shè)置為升序排序或者降序排序)
  • limit,skip (限制和跳過(guò):可以將流數(shù)據(jù)的部分截取,可用于后臺(tái)的分頁(yè)場(chǎng)景)
  • map(映射轉(zhuǎn)換)
  • collect,toList(不可以對(duì)集合去重)
  • collect, toSet(可以集合去重)
  • toArray(將流數(shù)據(jù)轉(zhuǎn)為數(shù)組)
  • mapToInt,distinct(將流數(shù)據(jù)轉(zhuǎn)成IntStream,并去重)
  • reduce 求和
  • reduce 求最大值
  • reduce 求最小值
  • reduce 求乘積
  • findFirst(查找第一個(gè)元素)
  • findAny(任意查找一個(gè)元素)
  • allMatch(判斷是否全部滿足條件,全部滿足返回 true,否則返回false)
  • anyMatch(判斷是否有一個(gè)滿足條件,只要有一個(gè)滿足就返回 true,否則都不滿足返回false)
  • noneMatch(判斷是否都不滿足條件,都不滿足返回true,否則返回false)
  • flatmap(扁平化流處理)
責(zé)任編輯:武曉燕 來(lái)源: 運(yùn)維開(kāi)發(fā)故事
相關(guān)推薦

2022-05-24 08:21:16

數(shù)據(jù)安全API

2024-11-27 08:47:12

2025-03-27 02:00:00

SPIJava接口

2022-07-29 08:17:46

Java對(duì)象內(nèi)存

2025-03-17 11:21:08

APISwagger界面

2021-08-27 07:06:10

IOJava抽象

2024-02-20 21:34:16

循環(huán)GolangGo

2023-08-10 08:28:46

網(wǎng)絡(luò)編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2023-06-30 08:18:51

敏捷開(kāi)發(fā)模式

2023-09-10 21:42:31

2025-04-08 00:16:07

2024-10-15 08:08:13

2022-12-06 08:12:11

Java關(guān)鍵字

2022-11-12 12:33:38

CSS預(yù)處理器Sass

2024-02-26 00:00:00

Go性能工具

2023-12-28 09:55:08

隊(duì)列數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)

2022-01-04 12:08:46

設(shè)計(jì)接口

2023-07-27 07:46:51

SAFe團(tuán)隊(duì)測(cè)試

2023-04-26 07:30:00

promptUI非結(jié)構(gòu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜视频在线 | 亚洲一区二区在线 | 日韩三级一区 | 97色在线视频 | 中文字幕高清av | www.黄色在线观看 | 国产欧美精品一区二区色综合朱莉 | 成人国产精品入口免费视频 | 国产成人免费视频网站视频社区 | 欧美性精品 | 欧美成人a∨高清免费观看 色999日韩 | 日韩高清电影 | 亚洲一一在线 | 伊人伊人 | 奇米四色在线观看 | 91精品国产日韩91久久久久久 | 91资源在线 | 国产综合在线视频 | 欧美亚洲国产精品 | 日韩视频在线观看一区二区 | 日韩国产专区 | 欧美久久不卡 | va精品| 国产精品国产三级国产aⅴ中文 | 一区二区三区国产精品 | 亚洲欧美日韩中文在线 | 91se在线 | 久久精品国产99国产精品 | 精品一区二区三区91 | 久久国产精品99久久久久久丝袜 | 亚洲高清成人在线 | 国产精品久久久久久久久久免费看 | 日韩一区二区三区在线 | 亚洲欧美一区二区三区国产精品 | 久久久精彩视频 | 久久久精品亚洲 | a级大片免费观看 | 日韩a| 久久精品中文字幕 | 成人av网站在线观看 | 欧美电影一区 |