首页  

Java函数式与非函数式写法性能对比     所属分类 java 浏览量 821
普通写法 vs 函数式 stream 写法
普通写法性能更好 ,大概有5倍的差距

热点代码推荐使用普通写法
一行代码干一件事情 ,逻辑清晰 
灵活性 扩展性 可读性 可复用性 更好
更容易加入 null值处理 空值处理 异常处理 监控埋点 等 逻辑



538 1331 1926
391 929 1857
358 951 1865
352 963 1857
354 970 1858
356 953 1856
361 958 1830
354 955 1838
359 972 1886
360 950 1938
371 1040 2308
412 1061 2458


import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class StreamPerf { public static void main(String[] args) throws Exception { List<DTO> dtos = new ArrayList<>(); for (int i = 0; i < 10; i++) { DTO dto = new DTO(); dto.setName("name" + i); dtos.add(dto); } String[] arr = getNameArray(dtos); print(arr); arr = getNameArrayUseStream(dtos); print(arr); final int COUNT = 10000000; while (true) { runTest(dtos, COUNT); } } private static void runTest(List<DTO> dtos, int count) { long start = System.currentTimeMillis(); for (int i = 0; i < count; i++) { getNameArray(dtos); } long end = System.currentTimeMillis(); long time1 = end - start; start = System.currentTimeMillis(); for (int i = 0; i < count; i++) { getNameArray2(dtos); } end = System.currentTimeMillis(); long time2 = end - start; start = System.currentTimeMillis(); for (int i = 0; i < count; i++) { getNameArrayUseStream(dtos); } end = System.currentTimeMillis(); long time3 = end - start; System.out.println(time1 + " " + time2 + " " + time3); } private static String[] getNameArray(List<DTO> dtos) { int num = dtos.size(); String[] arr = new String[num]; for (int i = 0; i < num; i++) { arr[i] = dtos.get(i).getName(); } return arr; } private static String[] getNameArray2(List<DTO> dtos) { int num = dtos.size(); List<String> list = new ArrayList<>(); for (int i = 0; i < num; i++) { list.add(dtos.get(i).getName()); } return list.toArray(new String[0]); } private static String[] getNameArrayUseStream(List<DTO> dtos) { List<String> list = dtos.stream().map(e -> e.getName()).collect(Collectors.toList()); return list.toArray(new String[0]); } private static void print(String[] arr) { for (String item : arr) { System.out.print(item + " "); } System.out.println(); } private static class DTO { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } }
完整代码 https://gitee.com/dyyx/hellocode/blob/master/src/StreamPerf.java

上一篇     下一篇
素描入门

投资大师的投资心理学

aerospike使用异步接口

马拉松注意事项

Collectors groupingBy 用法及性能

能源化工ETF 159981