首页 > 编程语言 >Java中list.stream()各种常用方法汇总

Java中list.stream()各种常用方法汇总

时间:2024-03-26 16:29:24浏览次数:14  
标签:toList Java stream Collectors list collect numbers

Java中list.stream各种常用方法汇总

关于Java 8 Liststream() 方法,整理了多种流操作方法及其应用场景和代码示例:


        在Java 8中,当我们使用List这类集合时,利用stream()方法可以非常方便地进行各种高级操作。以下汇总各种用法

1. 数据筛选 - filter() filter()内值判断是否为true,横向筛选

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

// 筛选出大于等于8的数字  CSDN-小小野猪
List<Integer> filteredNumbers = numbers.stream()
                                     .filter(n -> n >= 8)
                                     .collect(Collectors.toList());
// 筛选出来等于8的									 
numbers.stream().filter(item -> 8 == item).collect(Collectors.toList())

// 查询userId等于100的,取第一个值findFirst()
list.stream().filter(item-> 100 == item.getUserId()).findFirst().orElse(null);

// 查询userId不为空的项,然后使用map()方法只取userId
list.stream().filter(item -> StringUtils.isNotEmpty(item.getUserId())).map(user -> user.getUserId()).collect(Collectors.toList());

// filter()里面可以是多个条件,可以是&& ,也可以是||
list.stream().filter(item -> Objects.nonNull(item.getParentId()) && 100 == item.getParentId()).collect(Collectors.toList());

// filter() 后面可以跟forEach循环
list.stream().filter(item -> StringUtils.isEmpty(item.getSjh())).forEach(i -> i.setUserId("000000");

2. 数据转换 - map() map()内值是获取某个字段属性

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");

// 将所有名字转化为大写  CSDN-小小野猪
List<String> uppercasedNames = names.stream()
                                   .map(String::toUpperCase)
                                   .collect(Collectors.toList());
								   
// map里面可以使用String::toUpperCase  或者   User::getDate				   
List<String> dateList = list.stream().map(User::getDate).collect(Collectors.toList());

// map里面可以使用String::toUpperCase  或者   User::getDate  或者   item ->item.getDate() 
List<String> dateList = list.stream().map(item ->item.getDate()).collect(Collectors.toList());								   
											
// map里面可以转换,其中list和list2是同级,后面可以跟接{}来处理逻辑
List<HashMap> resultList = list.stream().map(m -> {
	list2.stream().filter(m2 -> Objects.equals(m.get("test"),m2.get("test"))).forEach(m2 -> {
		m.put("isEmpty",m2.get("emptyFlag"));
	});
	return m;
}).collect(Collectors.toList());

								   

3. 数据收集 - collect()


// 将数字列表转换为字符串,用逗号分隔  CSDN-小小野猪
String joinedNumbers = numbers.stream().map(Object::toString).collect(Collectors.joining(", "));

// 使用Collectors.toSet()将列表元素收集到HashSet中  CSDN-小小野猪
Set<Integer> uniqueNumbers = numbers.stream().collect(Collectors.toSet());
								   
// collect() 方法里面拼接Collectors.joining(";")),可以将多个string拼接合并成一个							   
String collect = (String) strList.stream().collect(Collectors.joining(";"));

								   

4. 条件判断 - anyMatch(), allMatch(), noneMatch()


// 任何一个匹配
boolean anyEven = numbers.stream().anyMatch(n -> n % 2 == 0);
// 全部匹配
boolean allPositive = numbers.stream().allMatch(n -> n > 0);
// 未匹配
boolean noZeros = numbers.stream().noneMatch(n -> n == 0);

5. 排序 - sorted()

// 升序排序  CSDN-小小野猪
List<Integer> sortedNumbers = numbers.stream()
                                    .sorted()
                                    .collect(Collectors.toList());

// 降序排序  CSDN-小小野猪
List<Integer> reversedNumbers = numbers.stream()
                                      .sorted(Comparator.reverseOrder())
                                      .collect(Collectors.toList());
// 根据User里面的Id 进行排序
List<User> sortedList = list.stream().sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());

// 根据User里面的Id 进行排序
List<User> sortedList = list.stream().sorted(Comparator.comparing(User::getId).reversed()).collect(Collectors.toList());
				
				

6. 遍历 - forEach()


// for循环
names.forEach(name -> System.out.println("Greeting to " + name));

7. 统计 - count(), distinct()


// 获取数量
long count = numbers.stream()
                     .count();
// distinct之后在获取集合
List<String> distinctNames = names.stream()
                                 .distinct()
                                 .collect(Collectors.toList());

8. 查找元素 - findAny(), findFirst()


// 返回任意一个元素
Optional<Integer> anyNumber = numbers.stream().findAny();

// 返回第一个
Optional<String> firstNonEmptyName = names.stream()
                                         .filter(name -> !name.isEmpty())
                                         .findFirst();

9. 数值类型映射 - mapToInt(), mapToLong(), mapToDouble()


// 将value转为Int,获取IntSummaryStatistics
IntSummaryStatistics stats = numbers.stream().mapToInt(Integer::intValue).summaryStatistics();
System.out.println("Count: " + stats.getCount());
System.out.println("Sum: " + stats.getSum());
System.out.println("Average: " + stats.getAverage());
System.out.println("Max: " + stats.getMax());
System.out.println("Min: " + stats.getMin());

long sumOfChars = names.stream().mapToInt(String::length).sum();

10. 求最大值和最小值 - max(), min()


// 求出最大值
OptionalInt maxNum = numbers.stream()
                           .mapToInt(Integer::intValue)
                           .max();
// 求出最小值
Optional<String> shortestName = names.stream().min(Comparator.comparing(String::length));

11. 中间操作 - peek()

numbers.stream()
       .peek(System.out::println) // 在处理数据前先打印每个元素
       .filter(n -> n > 5)
       .collect(Collectors.toList());

12. 跳过元素 - skip()

List<Integer> skippedNumbers = numbers.stream()
                                     .skip(3) // 跳过前三个元素
                                     .collect(Collectors.toList());

13. 转换为数组 - toArray()


// 将list转为数组
Integer[] integerArray = numbers.stream().toArray(Integer[]::new);

14. 聚合操作 - reduce()


// 求和
int sum = list.stream().collect(Collectors.summingInt(User::getAge))

// 求和
int sum = numbers.stream().reduce(0, Integer::sum); 

15. 分组 - groupingBy()

LinkedHashMap<Date,List<User>> linkedHashMap = list.stream().collect(Collectors.groupingBy(Staff::getDate, LinkedHashMap::new,Collectors.toList()));

声明

本内容版权归属于CSDN-小小野猪,任何未经授权的复制、转载、传播、贩卖、转赠等均属违法行为,必将追究法律责任!!!

标签:toList,Java,stream,Collectors,list,collect,numbers
From: https://blog.csdn.net/gongjin28_csdn/article/details/137048584

相关文章

  • java基础复习
    continue是结束本次循环继续下一次循环;break是结束整个循环;打印数组出来的是数组的地址值;动态初始化系统自动分配0;数组可以存引用数据类型,如对象;同一个方法名可以有不同的返回值,自动匹配形参;字符串比较字符串内容用booleanb=s1.equals(s2)、equalsIgnoreCase;遍历字符串......
  • java基础学习笔记
    publicclassdemo{publicstaticvoidmain(String[]args){}}输入Scannersc=newScanner(System.in);System.out.println("请输入一个整数:");inti=sc.nextInt();随机数Randomr=newRandom();intnumber=r.nextInt(100);//生成随机数0~99......
  • [计算机效率] 文件搜索工具:Listary(附详细使用教程)
    3.5文件搜索工具:ListaryListary是一款实用的搜索工具,它能为我的电脑(资源管理器)增添许多智能命令,提高用户日常收藏和整理文件的效率。它具备多种实用功能,例如收藏文件夹、快速打开最近浏览的文件夹,以及快速显示/隐藏文件扩展名等。此外,Listary还是一个轻量级的软件,不会过多......
  • java servlet
    SpringMVC的核心控制器DispatcherServlet会处理所有的请求,项目中使用Controller基本能解决大部分的功能需求,但有时也需要使用Servlet,比如实现拦截和监听功能;Servlet是Sun公司所设计开发的可以用于接收和处理HTTP请求的Java类,SpringMVC这样的框架就是对Servlet的二次......
  • 超实用!10条JavaScript这20年来增加的新功能!
    部门捞人,前端可投:https://jinshuju.net/f/o38ijj在过去的20年里,JavaScript经历了多次更新和升级,引入了许多新功能以增强其表达力、交互性和开发效率。以下是一些显著的新功能:**1.ECMAScript6(ES6)**:这是JavaScript的一个重要更新,引入了箭头函数、模板字符串、解构赋值、默认......
  • Java包装经验进面试后实话实说真的找不到工作吗?
    提升Java开发能力可以通过多种途径来弥补经验的不足。你提到的参与开源项目是一个非常好的方法,特别是选择一些简单的项目或脚手架,可以让你逐步熟悉实际开发流程和团队协作。我这里有一套编程入门教程,不仅包含了详细的视频讲解,项目实战,还提供了丰富的源代码。如果你渴望学习编......
  • 第二篇-Javascript流程控制语句
    流程控制语句:在程序执行的过程中,各个代码的执行顺序对程序的结果是有直接影响的。很多时候我们要通过控制代码的执行顺序来实现要完成的功能。流程控制主要有三种结构,分别是顺序结构、分支结构和循环结构,代表三种代码执行的顺序。 JavaScript 条件判断语句://条件成立执行......
  • Java程序基础
    第1章命名问题类名 : 首字母大写,其余小写,符合驼峰命名变量 : 首字母小写方法 : 首字母小写包名 : 小写第二章运算符2.1赋值运算符2.1.1Java的赋值运算符包括以下几种:赋值运算符(=):将右边表达式的值赋给左边的操作数。加法赋值运算符(+=):相当于a=a+b。减法......
  • Javascript基础知识
    Javascript简介:什么是Javascript       JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的高级语言。脚本语言:在程序的运行过程中逐行进行解释执行,不需要预编译。动态类型:在声明了一个变量之后,我们能够随时改变它的数据类型。弱类型:变量在使用前......
  • 第三篇-Javascript数组
    什么是数组数组指一组有序数据的集合,其中的每个数据被称作元素,在数组中可以存放任意类型的元素。可以通过new关键字来创建数组。Javascript访问数组1、通过索引访问单个元素:letarr=[1,2,3,4,5];console.log(arr[0]);//输出1console.log(arr[2]);//输出3cons......