对比 list.stream().findFirst().get()与list.get(0)
测试代码
public class TestStream {
public static void main(String[] args) {
compareGetWithStreamFindFirst();
}
private static void compareGetWithStreamFindFirst() {
int size = 100000;
System.out.println("findFirst耗时:" + calculateStreamFindFirstTime(size));
System.out.println("get耗时:" + calculateGetTime(size));
// get耗时:200-300
// findFirst耗时:110,000-210,000
}
private static long calculateGetTime(int size) {
ArrayList<User> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
list.add(new User("aa" + i, "bb" + i));
}
long start = System.nanoTime();
User user = list.get(0);
long end = System.nanoTime();
return end - start;
}
private static long calculateStreamFindFirstTime(int size) {
ArrayList<User> list = new ArrayList<>();
for (int i = 0; i < size; i++) {
list.add(new User("cc" + i, "dd" + i));
}
long start = System.nanoTime();
User user = list.stream().findFirst().get();
long end = System.nanoTime();
return end - start;
}
}
User.java实体类:
@Data
public class User {
private String username;
private String password;
public User () {}
public User (String username, String password) {
this.username = username;
this.password = password;
}
}
结论:经多次测试,list.get(0)比list.stream().findFirst().get()的速度快500倍左右。因为findFirst先将list转换为流,需要消耗时间。但由于两者执行时间都很快,所以没有使用System.currentTimeMillis()而是使用System.nanoTime()来计算时间。在日常使用中可以忽略两种方式的执行效率差别。