最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java List移除相應元素的超簡潔寫法分享

 更新時間:2021年11月17日 09:29:59   作者:氫電公敵  
這篇文章主要介紹了Java List移除相應元素的超簡潔寫法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

List移除相應元素的超簡潔寫法

最近遇到了一個需求(好吧以前也遇到過),就是將一個List中的部分元素去除,如把string中帶數(shù)字的元素去除,以前是各種遍歷各種不爽,今天發(fā)現(xiàn)用Java8中的lambda寫,只需三行。

好了上代碼

List<String> list = new ArrayList<String>(){ 
    {
        // 為list添加數(shù)據(jù)
        addAll(Arrays.asList("wangzhen456liupei123".split("")));
        add("1521"); // 純數(shù)字數(shù)據(jù)
        add("wanghzen123") // 數(shù)字+字符數(shù)據(jù)
        add("wangzhen"); // 純字符串 
    }
};
System.out.println("初始數(shù)據(jù):" + list);
Pattern pattern = Pattern.compile("\\d");//匹配數(shù)字
Predicate<String> filter = s -> pattern.matcher(s).find();
list.removeIf(filter);//移除
System.out.println(list);

輸出如下:

初始數(shù)據(jù):[w, a, n, g, z, h, e, n, 4, 5, 6, l, i, u, p, e, i, 1, 2, 3, 1521, wangzhen] [w, a, n, g, z, h, e, n, l, i, u, p, e, i, wangzhen]

其實有機智的朋友可能已經(jīng)發(fā)現(xiàn)了,不要說三行了,一行都可以:

list.removeIf(s -> Pattern.compile("\\d").matcher(s).find());

雖說如果你想這樣寫也沒人能攔著你(同時你也要確定三個月之后依然能看懂)。但是從代碼的可讀性和可維護性角度來講,倒是不如前面三行的那個寫法。

總結:越精簡的代碼就越應該有注釋,不然哪天手一抽就Ctrl+/了 XD

Java List 刪除元素

在Java中,使用List時想要刪除某個特定個元素怎么辦?很好辦!因為List接口有remove()這個方法,我們只需要調(diào)用remove()方法,就可以刪除list中的某個元素。但是list自帶的有一些坑,在相鄰有相同元素時會掉坑:

使用list.remove()刪除:

我們看到有兩個“a”元素相鄰,但是刪除時卻只刪除了一個,這是為何呢?因為刪除時,每刪除一個元素,后邊的元素都會左移一位,也就是下標會減1,在for循環(huán)中,刪除第一個“a”時,i(下標)為0,此時list重排,后邊的元素全部左移1位,也就是說第二個“a”元素的下標從1變?yōu)榱?,而此時for循環(huán)進行已經(jīng)第二次循環(huán)了,執(zhí)行了i++,i的值為1,對應為“b”元素,然后向后循環(huán),再也找不到“a”元素了。所以相鄰元素有重復的話,只能刪除一個。這明顯不符合我們的需求。

那解決辦法是什么呢?

1.刪除后元素后,i-1

刪除一個元素后,后邊的元素左移1位,此時i-1,保證了下次循環(huán)能訪問到左移了1位的元素。

2.反向刪除

我們先從后邊的元素開始循環(huán),一個一個的往前面循環(huán),找出特定元素刪除

這樣,就算刪除了倒數(shù)第一個"a"元素,list重排,也只是把后邊的元素左移1位,此時倒數(shù)第一個“a”元素(下標為1)被刪除,接著b替代了a成為了下標為1的元素,但前邊的元素不變,i-- = 0 后依然能夠找到其相鄰的a元素。

3.使用迭代器刪除(iterator)(推薦)

Iterator.remove() 方法會在刪除當前迭代對象的同時,會保留原來元素的索引。所以用迭代刪除元素是最保險的方法,建議大家使用List過程,這其實和上面第一中方法類似,只不過iterator內(nèi)部幫我們做了類似i-1的操作。推薦使用這種做法,因為我們不保證每次都記得手動把下標減去1。

4.賦值給新的list

其實我們可以轉換思維,可以過濾掉不需要的元素后賦值給新的list對象,利用java8的lambda表達式和強大的stream流形式進行內(nèi)部迭代來過濾掉特定元素,我們只需一行代碼就可以實現(xiàn)。雖然這種方式比較簡潔,但是定義了新變量,舊的list就只能等待漫長的gc了。

注意:在進行普通for循環(huán)刪除時,不要把list.size()抽離出去賦值給變量,然后用此變量做為for條件, 因為刪除時,list.size()的值是會改變的,要把list.size作為for條件。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java DatabaseMetaData用法案例詳解

    Java DatabaseMetaData用法案例詳解

    這篇文章主要介紹了Java DatabaseMetaData用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • springcloud項目改名的操作方法

    springcloud項目改名的操作方法

    這篇文章主要介紹了springcloud項目改名的操作方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 使用Java實現(xiàn)6種常見負載均衡算法

    使用Java實現(xiàn)6種常見負載均衡算法

    Java負載均衡算法也是分布式系統(tǒng)中的重要組成部分,用于將來自客戶端的請求分配到不同的后端服務器上,本文將介紹常見的Java負載均衡算法,輪詢法、加權隨機法……一次性讓你了解?6?種常見負載均衡算法
    2023-06-06
  • MyBatis基于pagehelper實現(xiàn)分頁原理及代碼實例

    MyBatis基于pagehelper實現(xiàn)分頁原理及代碼實例

    這篇文章主要介紹了MyBatis基于pagehelper實現(xiàn)分頁原理及代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • SpringBoot混合使用StringRedisTemplate和RedisTemplate的坑及解決

    SpringBoot混合使用StringRedisTemplate和RedisTemplate的坑及解決

    這篇文章主要介紹了SpringBoot混合使用StringRedisTemplate和RedisTemplate的坑及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java實現(xiàn)的質因數(shù)分解操作示例【基于遞歸算法】

    Java實現(xiàn)的質因數(shù)分解操作示例【基于遞歸算法】

    這篇文章主要介紹了Java實現(xiàn)的質因數(shù)分解操作,結合實例形式較為詳細的分析了Java基于遞歸算法實現(xiàn)針對整數(shù)的質因數(shù)分解相關操作技巧,需要的朋友可以參考下
    2018-03-03
  • 深度分析java dump文件

    深度分析java dump文件

    java內(nèi)存dump是jvm運行時內(nèi)存的一份快照,利用它可以分析是否存在內(nèi)存浪費,可以檢查內(nèi)存管理是否合理,當發(fā)生OOM的時候,可以找出問題的原因。那么dump文件的內(nèi)容是什么樣的呢?
    2021-05-05
  • Java中的ThreadLocal詳解

    Java中的ThreadLocal詳解

    這篇文章主要介紹了Java中的ThreadLocal詳解,ThreadLocal?是一個線程局部變量,其實的功用非常簡單,就是為每一個使用該變量的線程都提供一個變量值的副本,是Java中一種較為特殊的線程綁定機制,需要的朋友可以參考下
    2023-09-09
  • JAVA實現(xiàn)線程的三種方法

    JAVA實現(xiàn)線程的三種方法

    這篇文章介紹了JAVA實現(xiàn)線程的三種方法,有需要的朋友可以參考一下
    2013-09-09
  • JAVA實現(xiàn)圖書管理系統(tǒng)項目

    JAVA實現(xiàn)圖書管理系統(tǒng)項目

    相信每一個學生學編程的時候,應該都會寫一個小項目——圖書管理系統(tǒng)。為什么這么說呢?我認為一個學校的氛圍很大一部分可以從圖書館的氛圍看出來,而圖書管理系統(tǒng)這個不大不小的項目,接觸的多,也比較熟悉,不會有陌生感,能夠練手,又有些難度,所以我的小項目也來了
    2021-10-10

最新評論

桦甸市| 滦南县| 张家界市| 桑植县| 彩票| 新乐市| 上蔡县| 洞头县| 湖北省| 鹤庆县| 宝兴县| 山西省| 信宜市| 清镇市| 齐齐哈尔市| 舒城县| 游戏| 凉山| 出国| 孝感市| 邵武市| 芮城县| 涿州市| 织金县| 堆龙德庆县| 荆门市| 延安市| 临潭县| 万盛区| 民丰县| 郎溪县| 乐至县| 翁源县| 信丰县| 龙口市| 屏南县| 武宁县| 洪泽县| 平远县| 铜鼓县| 高雄市|