java stream的常见操作

1.List<String> 转 List<Integer>

如果 strList 中全是数字字符串,可通过如下转换为 integerList

        List<String> strList = new ArrayList<>(Arrays.asList("7","8","9"));List<Integer> integerList =     strList.stream().map(Integer::valueOf).collect(Collectors.toList());

2.List<String> 转 Integer[ ]

如果 strList 中全是数字字符串,可通过如下转换为 intergerArry

        List<String> strList = new ArrayList<>(Arrays.asList("7","8","9"));Integer[] intergerArry = strList.stream().map(Integer::valueOf).toArray(Integer[]::new);

3.String 转 List<Character>

        String str = "abcdef";List<Character> list = str.chars().mapToObj(x -> (char) x).collect(Collectors.toList());

4.String[ ] 转 List<String>

        String[] array = new String[]{"aa","bb","cc"};List<String> strList = Arrays.stream(array).collect(Collectors.toList());

5.String[ ] 转 Integer [ ]

        String[] strArry = new String[]{"5", "6", "1", "4", "9"};Integer[] integerArry = Arrays.stream(strArry).map(Integer::parseInt).toArray(Integer[]::new);

6.List<Integer> 转 int [ ]

        List<Integer> integerList = new ArrayList<>(Arrays.asList(5,6,1,4,9));int[] arr = integerList.stream().mapToInt(Integer::intValue).toArray();

7.int [ ] 转 List<Integer>

        int[] intArry = new int[]{5,6,1,4,9};List<Integer> integerList = Arrays.stream(intArry).boxed().collect(Collectors.toList());

8.int [ ] 转 Integer [ ]

        int[] intArry = new int[]{5, 6, 1, 4, 9};Integer[] integerArry = Arrays.stream(intArry).boxed().toArray(Integer[]::new);

9.int [] 最大、最小值、平均值,求和

        int[] arr = new int[]{12,3,34,67,100,99};int maxValue = Arrays.stream(arr).max().getAsInt();int minValue = Arrays.stream(arr).min().getAsInt();double averValue = Arrays.stream(arr).average().getAsDouble();int sumValue = Arrays.stream(arr).sum();System.out.println("the max:" + maxValue);System.out.println("the min:" + minValue);System.out.println("the average:" + averValue);System.out.println("the sum:" + sumValue);

10.上面是流里面使用 max、min、average 、sum方法获取数组的最大、最小值、平均值,求和。
除了上面的方法还可以像下面这样获取最大值、最小值、平均值,求和。

        int[] intArray = {12,3,34,67,100,99};IntStream intStream = IntStream.of(intArray);IntSummaryStatistics statistics = intStream.summaryStatistics();System.out.println("the max:" + statistics.getMax());System.out.println("the min:" + statistics.getMin());System.out.println("the average:" + statistics.getAverage());System.out.println("the sum:" + statistics.getSum());//statistics.getCount()相当于获取数组大小System.out.println("the count:" + statistics.getCount());

11.String[] 对每个元素分割并转换为其他类型

        String[] array = {"a-1", "b-2", "c-3"};//"-分割后获取字母,转为新数组String[] strArray = Arrays.stream(array).map(v -> v.split("-") [0]).toArray(String[]::new);//"-分割后获取字母,转ListList<String> list = Arrays.stream(array).map(v -> v.split("-") [0]).collect(Collectors.toList());//"-分割后获取数字,转ListList<Integer> numberlist = Arrays.stream(array).map(v -> Integer.parseInt(v.split("-") [1])).collect(Collectors.toList());//"-分割后获取字母,用逗号拼接为字符串String str = Arrays.stream(array).map(v -> v.split("-") [0]).collect(Collectors.joining(","));System.out.println(Arrays.toString(strArray));//[a, b, c]System.out.println(list);//[a, b, c]System.out.println(numberlist);//[1, 2, 3]System.out.println(str);//a,b,c

12.List<String> 逗号拼接为一个字符串

        List<String> strList = new ArrayList<>(Arrays.asList("a","b","c"));String str = strList.stream().collect(Collectors.joining(","));System.out.println(str);//a,b,c

13.List<Integer> 逗号拼接为一个字符串

        List<Integer> integerList = Arrays.asList(7, 8, 9);String str = integerList.stream().map(String::valueOf).collect(Collectors.joining(","));System.out.println(str);//7,8,9

14.生成指定范围的数组或List

  • 生成[0,100)的 int[ ]
        int[] intArray = IntStream.range(0, 100).toArray();
  • 生成[0,100)的 List
		List<Integer> intList= IntStream.range(0, 100).boxed().collect(toList());List<String> strList = IntStream.range(0, 100).boxed().map(i -> i.toString()).collect(toList());
  • 生成[0,100]的 int[ ]
        int[] intArray1 = IntStream.rangeClosed(0, 100).toArray();
  • 生成[0,100]的 List
		List<Integer> intList= IntStream.rangeClosed(0, 100).boxed().collect(toList());List<String> strList = IntStream.rangeClosed(0, 100).boxed().map(i -> i.toString()).collect(toList());

15.判断数组中是否含有某一值

  • 字符串数组
        String[] values = {"AB","BC","CD","AE"};boolean contains = Arrays.stream(values).anyMatch("AE"::equals);
  • int数组
        int[] a = {1,2,3,4};boolean contains = IntStream.of(a).anyMatch(x -> x == 4);

16.数组或List求和

  • 数组求和
        int[] intArray = {11, 5, 3, 2, 1};int sum = Arrays.stream(intArray).reduce(0, Integer::sum);
  • List求和
        List<Integer> list = new ArrayList<>(Arrays.asList(5, 1, 7, 10));int sum = list.stream().reduce(0, Integer::sum);

17.两个数组合并为一个新的数组

  • 两个字符串数组合并为一个新的数组
        String[] a = {"a", "b", "c"};String[] b = {"1", "2", "3"};String[] c = Stream.of(a,b).flatMap(Stream::of).toArray(String[]::new);
  • 两个 int 型数组合并为一个新的 int 型数组
        int[] a = new int[]{1,3};int[] b = new int[]{2,4};int[] c =  IntStream.concat(Arrays.stream(a), Arrays.stream(b)).toArray();

18.两个数组合并为一个List

  • 两个String数组转List<String>
        String[] a = {"a", "b", "c"};String[] b = {"1", "2", "3"};List<String> strList = Stream.of(a, b).flatMap(Stream::of).collect(Collectors.toList());
  • 两个int数组转List<Integer>
        int[] a = new int[]{1, 2};int[] b = new int[]{3, 4};List<Integer> integerList = Stream.of(IntStream.of(a).boxed(), IntStream.of(b).boxed()).flatMap(s -> s).collect(Collectors.toList());

  19.两个List合并为一个新的List

        List<String> lis1 = new ArrayList<>(Arrays.asList("a", "b", "c"));List<String> list2 = new ArrayList<>(Arrays.asList("e", "f", "g"));List<String> newList = Stream.of(lis1, list2).flatMap(Collection::stream).collect(Collectors.toList());

20.List<Integer>求交集、并集、差集

List<Integer> list = new ArrayList<>(Arrays.asList(7, 8, 9));
List<Integer> list2 = new ArrayList<>(Arrays.asList(3,4, 9));

对 list 和 list2求交集、并集、差集

//交集List<Integer> beMixed = list.stream().filter(list2::contains).collect(Collectors.toList());System.out.println(beMixed);//[9]//并集
List<Integer> aggregate = Stream.of(list, list2).flatMap(Collection::stream).distinct().collect(Collectors.toList());
System.out.println(aggregate);//[7, 8, 9, 3, 4]//差集
List<Integer> subtraction = list.stream().filter(v->!list2.contains(v)).collect(Collectors.toList());
System.out.println(subtraction);//[7, 8]

21.Map的value保存为List、Set

  • 保存为List
        Map<String, String> map = new HashMap<>();map.put("1", "a");map.put("2", "b");map.put("3", "c");List<String> values = map.values().stream().collect(Collectors.toList());
  • 保存为Set
        Map<String, String> map = new HashMap<>();map.put("1", "a");map.put("2", "b");map.put("3", "c");Set<String> values = map.values().stream().collect(Collectors.toSet());

22.Map对value求和

        Map<String, Integer> map = new HashMap<>();map.put("1", 11);map.put("2", 22);map.put("3", 100);Integer sum = map.values().stream().mapToInt(Integer::valueOf).sum();System.out.println(sum);

23.Map<String, List<Integer>>获取所有的values为一个List<Integer>

将map 里的所有value合并为一个List

       List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3));List<Integer> list2 = new ArrayList<>(Arrays.asList(4, 5, 6));List<Integer> list3 = new ArrayList<>(Arrays.asList(7, 8, 9));Map<String, List<Integer>> map = new HashMap<>();map.put("a", list1);map.put("b", list2);map.put("c", list3);List<Integer> list = map.values().stream().flatMap(Collection::stream).collect(Collectors.toList());//下面的代码是一样的效果//List<Integer> list = map.entrySet().stream().map(e -> e.getValue()).flatMap(Collection::stream).collect(Collectors.toList());System.out.println(list);//[1, 2, 3, 4, 5, 6, 7, 8, 9]

24.String[]中的元素转大写并转为List<String>

        String[] strArray= { "java", "react", "angular", "vue" };List<String> list = Stream.of(strArray).map(test -> test.toUpperCase()).collect(Collectors.toList());

25.对String字符串中的数字求和

首先需要将该字符串转换为数组,接下来需要过滤掉非整数元素,最后,将该数组的剩余元素转换为数字并求和。

        String string = "Item1 10 Item2 25 Item3 30 Item4 45";Integer sum = Arrays.stream(string.split(" ")).filter((s) -> s.matches("\\d+")).mapToInt(Integer::valueOf).sum();

26.List<String>中统计首字母是j的个数

 List<String> list = Arrays.asList("java", "react", "angular", "javascript", "vue");long count = list.stream().filter(p -> p.startsWith("j")).count();

27.List<String>中获取第一个首字母是j的元素

List<String> list = Arrays.asList( "react","java", "angular", "javascript", "vue");//java
String firstJ = list.stream().filter(p -> p.startsWith("j")).findFirst().get();

28.List<String>统计各字符串出现的次数

List<String> items = Arrays.asList("apple", "apple", "orange", "orange", "orange", "blueberry", "peach", "peach", "peach", "peach");Map<String, Long> result = items.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));//{orange=3, apple=2, blueberry=1, peach=4}System.out.println(result);

29.List去除重复元素

        List<String> list = Arrays.asList("aa", "bb", "cc", "bb");List<String> distinctList = list.stream().distinct().collect(Collectors.toList());

30.List<List<String>>转List<String>

        List<String> a = Arrays.asList("Virat", "Dhoni", "Jadeja");List<String> b = Arrays.asList("1", "2", "3");List<List<String>> list = new ArrayList<>();list.add(a);list.add(b);List<String> newList = list.stream().flatMap(v -> v.stream()).collect(Collectors.toList());//[Virat, Dhoni, Jadeja, 1, 2, 3]System.out.println(newList);

31.多个List<String> 合并为一个List<String>

    public static void main(String[] args) {List<String> list1=new ArrayList<>(Arrays.asList("a","b","c"));List<String> list2=new ArrayList<>(Arrays.asList("d","e","f"));List<String> list3=new ArrayList<>(Arrays.asList("g","h","i"));List<String> list4=new ArrayList<>(Arrays.asList("1","2"));List<String> list5=new ArrayList<>(Arrays.asList("3","4","5"));List<String> result1 = join(list1, list2,list3);List<String> result2 = join(list4, list5);//[a, b, c, d, e, f, g, h, i]System.out.println(Arrays.toString(result1.toArray()));//[1, 2, 3, 4, 5]System.out.println(Arrays.toString(result2.toArray()));}@SafeVarargspublic static  List<String> join(List<String>... lists) {return Arrays.stream(lists).flatMap(Collection::stream).collect(Collectors.toList());}

32.List<Object>转Map<String, Object>

假设有Student类,里面含有id、name、score等信息。现在想把 List<Student> 转化为Map<String,Student>,其中key是name。

        List<Student> list = new ArrayList<>();list.add(new Student(1, "张三", 85));list.add(new Student(2, "李四", 60));Map<String, Student> map = list.stream().collect(Collectors.toMap(Student::getName, Function.identity()));

33.List<Object>针对某一成员变量获取最大、小值的Object

假设有 Student 类,里面含有 id、name、score 等信息。现在想获取List<Student> 中 score 最大的 Student 和 score 最小的 Student。

        List<Student> list = new ArrayList<>();list.add(new Student(1, "张三", 85));list.add(new Student(2, "李四", 60));list.add(new Student(3, "刘一", 70));list.add(new Student(4, "李四", 99));//获取 score 最大的 StudentStudent maxStudent = list.stream().max(Comparator.comparing(Student::getScore)).get();//获取 score 最小的 StudentStudent minxStudent = list.stream().min(Comparator.comparing(Student::getScore)).get();

34.List<Object>获取某个成员变量最大、最小值、平均值,求和

假设有 Student 学生类,里面含有 id、name、score 等信息。现在想获取 List<Student> 中的 score 的最大值、最小值、平均值,求和:

        List<Student> list = new ArrayList<>();list.add(new Student(1, "小名", 17));list.add(new Student(2, "小红", 18));list.add(new Student(3, "小蓝", 19));list.add(new Student(4, "小灰", 20));list.add(new Student(5, "小黄", 21));list.add(new Student(6, "小白", 22));IntSummaryStatistics intSummary = list.stream() .collect(Collectors.summarizingInt(Student::getScore));System.out.println(intSummary.getAverage());// 19.5System.out.println(intSummary.getMax());// 22System.out.println(intSummary.getMin());// 17System.out.println(intSummary.getSum());// 117

如果你只想求和可以像下面这样写:

        List<Student> list = new ArrayList<>();list.add(new Student(1, "小名", 17));list.add(new Student(2, "小红", 18));list.add(new Student(3, "小蓝", 19));list.add(new Student(4, "小灰", 20));list.add(new Student(5, "小黄", 21));list.add(new Student(6, "小白", 22));Integer sum = list.stream().mapToInt(Student::getScore).sum();//117//下面注释的两行代码和上一行的效果一样,都可以进行求和//Integer sum = list.stream().map(Student::getScore).reduce(0, Integer::sum);//Integer sum = list.stream().map(Student::getScore).mapToInt(Integer::intValue).sum();

35.List<Integer> 获取最大、最小值、平均值,求和

        List<Integer> list = Arrays.asList(12, 3, 34, 67, 100, 99);int maxValue = list.stream().max(Integer::compare).get();int minValue = list.stream().min(Integer::compare).get();double averValue = list.stream().mapToDouble(a -> a).average().getAsDouble();int sumValue = list.stream().reduce(0, Integer::sum);System.out.println("the max:" + maxValue);System.out.println("the min:" + minValue);System.out.println("the average:" + averValue);System.out.println("the sum:" + sumValue);

上面是流里面使用 max、min、average 、reduce 方法获取数组的最大、最小值、平均值,求和。
除了上面的方法还可以像下面这样获取最大值、最小值、平均值,求和。

        List<Integer> list = new ArrayList<>(Arrays.asList(12,3,34,67,100,99));IntSummaryStatistics statistics = list.stream().mapToInt(value -> value).summaryStatistics();System.out.println("the max:" + statistics.getMax());System.out.println("the min:" + statistics.getMin());System.out.println("the average:" + statistics.getAverage());System.out.println("the sum:" + statistics.getSum());System.out.println("the count:" + statistics.getCount());//获取list大小

拓展:
除了anyMatch ,stream 中还有 allMatch、noneMatch ,可以参考 

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

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

相关文章

【golang/g3n】3D游戏引擎G3N的windows安装与测试

目录 说在前面安装测试 说在前面 操作系统&#xff1a;win 11go version&#xff1a;go1.21.5 windows/amd64g3n版本&#xff1a;github.com/g3n/engine v0.2.0其他&#xff1a;找了下golang 3d相关的库&#xff0c;目前好像就这个比较活跃 安装 按照官方教程所说&#xff0c;…

当初自己为什么选择计算机?

还记得当初自己为什么选择计算机&#xff1f; 为什么当初选择计算机行业&#xff1f; 要说爱上计算机应该是高中的时候了&#xff0c;那时候第一次接触编程&#xff08;C&#xff09;&#xff0c;说实话&#xff0c;第一次写程序的时候感觉头大&#xff0c;啥都不会&#xff0c…

05 Vue中常用的指令

概述 All Vue-based directives start with a v-* prefix as a Vue-specific attribute. 所有基于 Vue 的指令都以 v-* 前缀作为 Vue 特有的属性。 v-text The v-text directive has the same reactivity as with interpolation. Interpolation with {{ }} is more perform…

linux 开机启动流程

1.打开电源 2.BIOS 有时间和启动方式 3.启动Systemd 其pid为1 4.挂载引导分区 /boot 5.启动各种服务 如rc.local

Ubuntu 常用命令之 ls 命令用法介绍

Ubuntu ls 命令用法介绍 ls是Linux系统下的一个基本命令&#xff0c;用于列出目录中的文件和子目录。它有许多选项可以用来改变列出的内容和格式。 以下是一些基本的ls命令选项 -l&#xff1a;以长格式列出文件&#xff0c;包括文件类型、权限、链接数、所有者、组、大小、最…

刚clone下来的项目如何上传到新的仓库

查看当前项目的git信息 git remote -v 查看git目录上传到哪个路径下 拉下的项目如何上传到新的仓库 git clone xxxcd xxxrm -r .git 删除原有的git信息&#xff0c;有问题一直回车git init 初始化gitgit add . git commit -m ‘xxx’git remote add origin 远程库地址&#…

ping命令的工作原理

ping&#xff0c;Packet Internet Groper&#xff0c;是一种因特网包探索器&#xff0c;用于测试网络连接量的程序。Ping 是工作在 TCP/IP 网络体系结构中应用层的一个服务命令&#xff0c; 主要是向特定的目的主机发送 ICMP&#xff08;Internet Control Message Protocol 因特…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用

目录 一、实验 1.部署Ansible自动化运维工具 2.K8S 节点安装nginx 3.Jenkins使用GitLab共享库实现基于Ansible的CD流水线部署前后端应用 二、问题 1.ansible安装报错 2.ansible远程ping失败 3. Jenkins流水线通过ansible命令直接ping多台机器的网络状态报错 一、实验 …

课设:FPGA音频均衡器 verilog设计及仿真 加报告

FPGA音频均衡器:将音频处理发挥到极致 引言: 随着音频技术的不断进步和音乐产业的飞速发展,人们对于音质的要求越来越高。而FPGA音频均衡器作为一种集数字信号处理与硬件加速技术于一体的创新解决方案,为音频处理带来了全新的可能性。本文将介绍什么是FPGA音频均衡器,以及…

力扣97. 交错字符串

动态规划 思路&#xff1a; 假设 dp[i][j] 是 s1 前 i 个元素和 s2 前 j 个元素能否交错构成 s3 的状态&#xff1b;则其上一个状态有&#xff1a; dp[i - 1][j] 且 s1[i -1] s3[i j - 1] 条件决定了状态 dp[i][j]&#xff1b;或者 dp[i][j - 1] 且 s2[j - 1] s3[i j - 1]…

C语言:猜数字游戏

#include<stdio.h> #include<time.h> #include<stdlib.h> void menu() {printf("********************************\n");printf("****** 1.开始 2.退出 ******\n");printf("********************************\n"); } voi…

tp中的调试模式

ThinkPHP有专门为开发过程而设置的调试模式&#xff0c;开启调试模式后&#xff0c;会牺牲一定的执行效率&#xff0c;但带来的方便和除错功能非常值得。 我们强烈建议ThinkPHP开发人员在开发阶段始终开启调试模式&#xff08;直到正式部署后关闭调试模式&#xff09;&#xf…

JDK8接口新增的方法

前言 在JDK8之前接口中的方法是不能有方法体的&#xff0c;但是在JDK8之后 为什么要新增这三个接口 增强接口能力&#xff0c;便于项目的扩展和维护把功能卸载接口中便于直接调用&#xff0c;如果要修改直接修改接口中的方法就可以 一&#xff0c;默认方法 必须使用default修饰…

Swin-Transformer 在图像识别中的应用

1. 卷积神经网络简单介绍 图像识别任务主要利用神经网络对图像进行特征提取&#xff0c;最后通过全连接层将特征和分类个数进行映射。传统的网络是利用线性网络对图像进行分类&#xff0c;然而图像信息是二维的&#xff0c;一般来说&#xff0c;图像像素点和周围邻域像素点相关…

2机5节点系统潮流MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 电力系统潮流计算是电力系统最基本的计算&#xff0c;也是最重要的计算。所谓潮流计算&#xff0c;就是已知电网的接线方式与参数及运行条件&#xff0c;计算电力系统稳态运行各母线电压、各支路电流、功率及…

接口自动化测试实操【设置断言思路】

1 断言设置思路 这里总结了我在项目中常用的5种断言方式&#xff0c;基本可能满足90%以上的断言场景&#xff0c;具体参见如下脑图&#xff1a; 在这里插入图片描述 下面分别解释一下图中的五种思路&#xff1a; 1&#xff09; 响应码 对于http类接口&#xff0c;有时开发人…

Spring AOP 和 Spring Boot 统一功能处理

文章目录 Spring AOP 是什么什么是 AOPAOP 组成切面&#xff08;Aspect&#xff09;连接点&#xff08;Join Point&#xff09;切点&#xff08;Pointcut&#xff09;通知&#xff08;Advice&#xff09; 实现 Spring AOP添加 Spring AOP 框架支持execution表达式定义切面、切点…

快速入门:使用 .NET Aspire 组件实现缓存

前言 云原生应用程序通常需要各种类型的可扩展缓存解决方案来提高性能。.NET Aspire 组件简化了连接到流行的缓存服务&#xff08;例如 Redis&#xff09;的过程&#xff0c;今天小编就为大家简单介绍一下如何使用 .NET Aspire 组件实现缓存。 本文的内容概要&#xff1a; 创…

Docker构建镜像时空间不足:/var/lib/docker,no space left on device

背景 在一次更新业务服务功能后&#xff0c;重新在服务器上构建微服务镜像&#xff0c;在构建镜像时报错空间不足&#xff1a; /var/lib/docker, no space left on device 赶紧用 df -h 看了下磁盘使用情况&#xff0c;果然&#xff0c; devicemapper 已经满了。。由于需要紧急…

使用Pytorch从零开始构建LoRA

引言 在这篇博文中&#xff0c;我将向大家展示如何使用Pytorch从头开始构建 LoRA。LoRA 是Low-Rank Adaptation或Low-Rank Adapters的缩写&#xff0c;它提供了一种高效且轻量级的方法来微调预先存在的语言模型。这包括BERT和RoBERTa等掩码语言模型&#xff0c;以及GPT、Llama…