JDK8新特性之stream
stream中有很多方法,讲一些常用的。
1.forEach(),遍历方法,很简单,对于一般的遍历可以替代for循环
1 2 3 | List<String> strings = Arrays.asList( "abc" , "" , "bc" , "efg" , "abcd" , "" , "jkl" ); strings.stream().forEach(System. out ::println); |
stream()是先将数组或列表流化,然后forEach()遍历并打印。这里用到::会在另一篇博文中专门说。
2.map(),用于映射数组或列表的结果,即对元素进行操作,然后按顺序输出或保存。
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); // 获取对应的平方数 List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
一般可以用于类型转换、或列表转map等。
3.filter(),过滤器,一般用于对元素数据的过滤
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); // 获取空字符串的数量 long count = strings.stream().filter(string -> string.isEmpty()).count();
过滤方法的实现一般用->去实现,可以在括号中定制实现过滤方法。
4.limit(),limit 方法用于获取指定数量的流
Random random = new Random(); random.ints().limit(10).forEach(System.out::println);
5.sorted(),排序方法,很好理解。
Random random = new Random(); random.ints().limit(10).sorted().forEach(System.out::println);
6.Collector 进行一些归约操作
方法很多,这个后面详细说
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("筛选列表: " + filtered); String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("合并字符串: " + mergedString);
toList是将流转换成List
join是将字符串以规定的格式输出,甚至可以规定前缀、后缀。
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"); List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList()); System.out.println("筛选列表: " + filtered); StringmergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", ")); System.out.println("合并字符串: " + mergedString);
7.distinct()去重,对于基本的包装类型可以直接去重,如String、Integer等。自定义类要重写equal()和hashcode(),不然失败。
List<ListPromtionUserResultDto> listPromtionResult = userFeign
.listPromtionUser(promtionUserIdList.stream().distinct()
.collect(Collectors.toList())).getData();
附一段生产代码,这里是调用另一个工程查的数据。去重完了之后要.collect(Collectors.toList())。转成list
这样不必使用set过滤数据,而且set与list转换比较麻烦。
下班记得打卡
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】