list循环给对象赋值可以用普通的for循环,也可以用foreach,也可以用stream流的方式
- 初始化
//搞个测试类来,省事就用内部静态类来测试
static class Demo{
String a;
String b = "bb";
void setA(String a) {
this.a = a;
}
}
//有两个属性,其中一个已经给默认值了,我们接下来给a赋值,
//在main方法中给list中添加一些元素
static int frequency = 100000;
public static void main(String[] args) {
List<Demo> list = new ArrayList<>();
testStream(list);
testFor(list);
testForeach(list);
}
private static void testFor(List<Demo> list) {
for (int i = 0; i < frequency; i++) {
list.add(new Demo());
}
LocalDateTime now = LocalDateTime.now();
for (Demo demo : list) {
demo.setA("98");
}
System.out.println("ordinary for 循环用时:"+ Duration.between(now, LocalDateTime.now()).toMillis());
}
private static void testStream(List<Demo> list) {
for (int i = 0; i < frequency; i++) {
list.add(new Demo());
}
LocalDateTime now = LocalDateTime.now();
List<Demo> collect = list.stream().peek(demo -> demo.setA("99")).collect(Collectors.toList());
System.out.println("stream用时:"+ Duration.between(now, LocalDateTime.now()).toMillis());
}
private static void testForeach(List<Demo> list) {
for (int i = 0; i < frequency; i++) {
list.add(new Demo());
}
LocalDateTime now = LocalDateTime.now();
list.forEach(demo -> demo.setA("100"));
System.out.println("foreach用时:"+ Duration.between(now, LocalDateTime.now()).toMillis());
}
跑10次看看结果
根据我自己的试验证明,在我的电脑上 for循环最快,stream最慢,如果不想要一个新的list,对速度又有一定的追求,建议用for循环赋值,主要是代码也没多写多少.