Java Stream 优化java代码
使用strteam就是为了代码更加简洁,同时功能 又不会收到影响,废话不多说
使用原始流
使用 int、long 和 double 等基本类型时,请使用IntStream、LongStream 和 DoubleStream 等基本流,而不是 Integer、Long 和 Double 等装箱类型流。原始流可以通过避免装箱和拆箱的成本来提供更好的性能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.java.file.operater; import org.junit.Test; import java.util.stream.IntStream; /** * @Description: * @Author: 喵星人 * @Create: 2023/10/12 18:23 */ public class StreamTest { @Test public void test(){ int [] array = new int []{ 1 , 2 , 3 , 4 , 5 }; IntStream intStream = IntStream.of(array); intStream.forEach(a->{ System.out.println(a); }); } } |
嵌套流
最佳实践是避免嵌套流,因为它可能导致代码难以阅读和理解。相反,尝试将问题分解为更小的部分,并使用中间集合或局部变量来存储中间结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | package com.java.file.operater; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @Description: * @Author: 喵星人 * @Create: 2023/10/12 18:23 */ public class StreamTest { @Test public void test(){ List<String> list1 = Arrays.asList( "apple" , "banana" , "cherry" ); List<String> list2 = Arrays.asList( "orange" , "pineapple" , "mango" ); List<String> list3 = Arrays.asList( "orange1" , "pineapple1" , "mango1" , "orange1" , "pineapple1" , "mango1" ); List<String> list4 = Arrays.asList( "orange2" , "pineapple2" , "mango2" , "orange2" , "pineapple2" , "mango2" ); List<String> stringList = Stream.concat(list1.stream(), list4.stream()) .filter(s -> s.toString().length() > 6 ) .collect(Collectors.toList()); stringList.forEach(a->{ System.out.println(a); }); } } |
使用并行流
并行虽然很快吗,但是顺序没法保证,常规的情况的很多问题都会在这里暴露出来,可以类比高并发思考
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package com.java.file.operater; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @Description: * @Author: 喵星人 * @Create: 2023/10/12 18:23 */ public class StreamTest { @Test public void test(){ List<Integer> integerList = Arrays.asList( 1 , 2 , 3 , 4 , 5 ); /** * 使用reduce求和,reduce方法接受两个参数:一个初始值(在这里是0), * 和一个二元操作符(在这里是Integer::sum)。Integer::sum是一个方法引用, * 它调用Integer类的sum方法来计算两个整数的和。 * reduce方法将流中的所有元素结合在一起(在这里是通过求和),并返回结果 */ Integer reduce = integerList.parallelStream().reduce( 0 , Integer::sum); System.out.println(reduce); } } |
使用惰性求值以获得更好的性能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.java.file.operater; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @Description: * @Author: 喵星人 * @Create: 2023/10/12 18:23 */ public class StreamTest { @Test public void test(){ List<Integer> list = Arrays.asList( 1 , 2 , 3 , 4 , 5 ); Optional<Integer> integer = list.stream() /** * 代码中的filter方法就是一个惰性操作。它不会立即执行,而是创建了一个新的流, * 该流包含了应用过滤操作的逻辑。只有当一个非惰性操作(例如findFirst)被调用时,所有的惰性操作才会被实际执行 */ .filter(n -> n > 3 ) /** * 由于findFirst方法,一旦找到第一个大于3的元素,过滤操作就会停止, * 而不是继续处理列表中的所有元素。这可以减少不必要的计算,从而提高性能 * findFirst是一个短路操作,意味着它不需要处理整个流就可以产生结果 */ .findFirst(); System.out.println(integer.get()); } } |
在map()之前使用filter()以避免不必要的处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package com.java.file.operater; import org.bouncycastle.tsp.TSPUtil; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @Description: * @Author: 喵星人 * @Create: 2023/10/12 18:23 */ public class StreamTest { @Test public void test(){ List<Integer> integerList = Arrays.asList( 1 , 2 , 3 , 4 , 5 ); List<Integer> list = integerList.stream() .filter(i -> i % 2 == 0 ) .map(i -> i * 2 ) .collect(Collectors.toList()); for (Integer integer : list) { System.out.println(integer); } } } |
使用distinct()删除重复项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | package com.java.file.operater; import org.bouncycastle.tsp.TSPUtil; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @Description: * @Author: 喵星人 * @Create: 2023/10/12 18:23 */ public class StreamTest { @Test public void test(){ List<Integer> integerList = Arrays.asList( 1 , 2 , 3 , 3 , 4 , 5 , 5 ); List<Integer> list = integerList.stream() .distinct() .collect(Collectors.toList()); list.forEach(a->{ System.out.println(a); }); } } |
谨慎使用sorted()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package com.java.file.operater; import org.bouncycastle.tsp.TSPUtil; import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** * @Description: * @Author: 喵星人 * @Create: 2023/10/12 18:23 */ public class StreamTest { @Test public void test(){ List<Integer> integerList = Arrays.asList( 34 , 3 , 1 , 89 , 2 , 10000 , 998 , 77 ); List<Integer> list = integerList.stream() .sorted() .collect(Collectors.toList()); list.forEach(a->{ System.out.println(a); }); } } |
来源:medium.com/javarevisited/10-java-stream-tips-must-read-2063a84af3be
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2022-10-12 java.security.InvalidKeyException: Illegal key size or default parameters