java8遍历_java8中的stream流遍历

1 packagecnom.test.testUtils;2

3 importjava.io.Serializable;4 importjava.util.ArrayList;5 importjava.util.Collections;6 importjava.util.Comparator;7 importjava.util.Iterator;8 importjava.util.List;9 importjava.util.Random;10

11 public classTestCollectionsSort {12

13 public static void main(String[] args) throwsInterruptedException {14 TestCollectionsSort test = newTestCollectionsSort();15

16 List list = new ArrayList();17 TestSortModel model = null;18 for (int i = 0; i < 80000; i++) {19 model = test.newTestSortModel();20 int intId = (int) (Math.random() * 100);21 model.setIntId(intId);22 model.setName("tes" +i);23 list.add(model);24 }25 //JAVA8 使用Comparator排序26 //list.sort(Comparator.comparing(TestSortModel::getIntId,27 //Comparator.nullsLast(Comparator.naturalOrder())));

28

29 List resList = new ArrayList();30

31 long t1 =System.currentTimeMillis();32 for(TestSortModel tsm : list) {33 int id =tsm.getIntId();34 //Thread.sleep(1);

35 resList.add(tsm.getName());36 }37 System.out.println("增强for循环 遍历耗时:" + (System.currentTimeMillis() - t1) + ";list.size()="

38 + list.size() + ";list=" +resList.toString());39 resList.clear();40

41 long t2 =System.currentTimeMillis();42 for (int i = 0; i < list.size(); i++) {43 int id =list.get(i).getIntId();44 //Thread.sleep(1);

45 resList.add(list.get(i).getName());46 }47 System.out.println("for循环 遍历耗时:" + (System.currentTimeMillis() - t2) + ";list.size()="

48 + list.size() + ";list=" +resList.toString());49 resList.clear();50

51 long t3 =System.currentTimeMillis();52 Iterator it =list.iterator();53 TestSortModel tm = null;54 while(it.hasNext()) {55 tm =it.next();56 int id =tm.getIntId();57 //Thread.sleep(1);

58 resList.add(tm.getName());59 }60 System.out.println("iterator 遍历耗时:" + (System.currentTimeMillis() - t3) + ";list.size()="

61 + list.size() + ";list=" +resList.toString());62 resList.clear();63

64 //parallerlStream遍历,适用于处理比较耗时的业务逻辑。65 //注意:若在遍历中将元素添加到另一个list,则这个list必须是线程安全的,否则遍历过程中会出现两种情况:66 //1.这个list中的元素会有丢失的情况; 2.遍历中会抛出:ArrayIndexOutOfBoundsException

67 List listt = Collections.synchronizedList(new ArrayList());68 long t4 =System.currentTimeMillis();69 list.parallelStream().forEach(tsm -> {//若是 forEachOrdered会保持原来list顺序

70 int id =tsm.getIntId();71 //listt.add(tsm);//输出的listt会有元素丢失,线程安全的list则不会

72 try{73 //Thread.sleep(1);

74 resList.add(tsm.getName());//输出的resList也会有元素丢失

75 } catch(Exception e) {76 e.printStackTrace();77 }78 });79 System.out80 .println("list.parallelStream().forEach() 遍历耗时:" + (System.currentTimeMillis() -t4)81 + ";list.size()=" + resList.size() + ";list=" +resList.toString());82 resList.clear();83

84 long t5 =System.currentTimeMillis();85 list.stream().forEach(tsm -> {//串行执行,与for循环效率相似,代码精简

86 int id =tsm.getIntId();87 try{88 //Thread.sleep(1);

89 resList.add(tsm.getName());90 } catch(Exception e) {91 //TODO Auto-generated catch block

92 e.printStackTrace();93 }94 });95 System.out.println("list.stream().forEach() 遍历耗时:" + (System.currentTimeMillis() -t5)96 + ";list.size()=" + list.size() + ";list=" +resList.toString());97 resList.clear();98

99 long t6 =System.currentTimeMillis();100 list.forEach(tsm -> {//精简代码,与for循环效率相似

101 int id =tsm.getIntId();102 try{103 //Thread.sleep(1);

104 resList.add(tsm.getName());105 } catch(Exception e) {106 //TODO Auto-generated catch block

107 e.printStackTrace();108 }109 });110 System.out.println("list.forEach() 遍历耗时:" + (System.currentTimeMillis() -t6)111 + ";list.size()=" + list.size() + ";list=" +resList.toString());112 resList.clear();113

114 /**

115 * for loop1 增强for循环 遍历耗时:80051116 * for loop2 for循环 遍历耗时:80032117 * iterator 遍历耗时:80069118 * list.parallelStream().forEach() 遍历耗时:20101 多线程环境下,执行耗时的业务逻辑时使用效率更好。119 * list.stream().forEach() 遍历耗时:80049 精简代码120 * list.forEach() 遍历耗时:80031121 */

122

123 }124

125 public class TestSortModel implementsSerializable {126

127 private static final long serialVersionUID = -890909910704287938L;128

129 private longlongId;130

131 private intintId;132

133 privateString name;134

135 public longgetLongId() {136 returnlongId;137 }138

139 public void setLongId(longlongId) {140 this.longId =longId;141 }142

143 public intgetIntId() {144 returnintId;145 }146

147 public void setIntId(intintId) {148 this.intId =intId;149 }150

151 publicString getName() {152 returnname;153 }154

155 public voidsetName(String name) {156 this.name =name;157 }158

159 }160 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值