list中抽出某一个字段的值_Java的stream代替List解决单线程等问题
生活随笔
收集整理的這篇文章主要介紹了
list中抽出某一个字段的值_Java的stream代替List解决单线程等问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
日常開發中,項目中存在大量的如下的代碼:
對了,先介紹一下lambda表達式
private void testLambda() { List list = new ArrayList(); //循環此list for (int i = 0; i < list.size(); i++) { System.out.println("for循環"); } for (Object o : list) { System.out.println("forEach循環"); } //這里我們的lambda登場了 list.forEach(s -> { System.out.println("lambda表達式循環"); });}ok,lambda表達式如上:
接著看我們的正題:如下代碼
Stream entityStream = demoEntityList.stream();//獲取一個并行的流文件Stream deParallel = demoEntityList.parallelStream();//lambda表達式,做簡單的for循環demoEntityList.forEach(demoEntity -> System.out.println("lambda表達式"));/** * *******場景一:******* * 根據某Id,獲取實體對象列表 * 原解法: */List resultById = new ArrayList();for (DemoEntity d : demoEntityList) { if ("id".equals(d.getId())) { resultById.add(d); }}是不是看起來很,,,煩躁,代碼多了,看了起來更暈,ok
改進如下:
//改進:
如此,一行代碼搞定。
/** * *******場景二:******* * 根據某Id,獲取對象列表內的某個元素列表 * 原解法: */List resultByIdStr = new ArrayList();for (DemoEntity d : demoEntityList) { if ("id".equals(d.getId())) { resultByIdStr.add(d.getDeName()); }}//改進:demoEntityList.parallelStream().filter(demoEntity -> "id".equals(demoEntity.getId())).map(DemoEntity::getDeName).collect(Collectors.toList());場景還沒有完,再看以下
/** * *******場景三:******* * 多條件查詢取值,根據某id,獲取實體對象列表,的deName值,并且deName=‘t’的對象集合 * 原解法: */List resultByIdStrName = new ArrayList();for (DemoEntity d : demoEntityList) { if ("id".equals(d.getId())) { if ("t".equals(d.getDeName())) { resultByIdStrName.add(d); } }}//改進:demoEntityList.parallelStream().filter(demoEntity -> "id".equals(demoEntity.getId())).filter(demoEntity -> "t".equals(demoEntity.getDeName())).collect(Collectors.toList());/** * *******場景四:******* * 刪除集合內,某個字段值 * 原解法: */for (DemoEntity d : demoEntityList) { if ("id".equals(d.getId())) { d.setDeAge(null); d.setDeName(null); }}//改進:demoEntityList.parallelStream().peek(demoEntity -> { demoEntity.setDeName(null); demoEntity.setDeAge(null);}).collect(Collectors.toList());/** * 改進場景:更換id為“1”的名稱為“t” */demoEntityList.parallelStream().peek(demoEntity -> { if ("1".equals(demoEntity.getId())) { demoEntity.setDeName("t"); }}).collect(Collectors.toList());看著改進場景,這樣寫,代碼是不是看起來,清清爽爽一目了然。
這里產生了一個嚴重問題:
之前我們的for循環,是一條條執行循環內的數據
stream.parallel.forEach()被我們程為流,多線程,并非安全線程,
一定注意…循環更新刪除,數據謹記加鎖操作。。
over,改進寫法完成
作者:木子啦啦啦啦
原文鏈接:https://blog.csdn.net/qq_42685333/article/details/103929287
總結
以上是生活随笔為你收集整理的list中抽出某一个字段的值_Java的stream代替List解决单线程等问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本田雅阁2006年自动落锁怎么样设置?
- 下一篇: 江夏二手车在哪里上牌?