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 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 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 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 dtos) {
int num = dtos.size();
List 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 dtos) {
List 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