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

java實戰(zhàn)小技巧之字符串與容器互轉詳解

 更新時間:2021年08月17日 09:18:46   作者:灰灰Blog  
Java.lang.String是Java的字符串類. Srting是一個不可變對象,下面這篇文章主要給大家介紹了關于java實戰(zhàn)小技巧之字符串與容器互轉的相關資料,需要的朋友可以參考下

前言

每天一個實戰(zhàn)小技巧:字符串與Collection的互轉

將字符串轉換為List,這種業(yè)務場景可以說非常非常常見了,實現方式也比較簡單

public List<String> str2list(String str, String split) {
    String[] cells = str.split(split);
    return Arrays.asList(cells);
}

那么除了上面這種實現方式之外,還有其他的么?

I. 字符串轉列表

上面的實現姿勢相當于字符串先轉數組,然后在通過數組轉列表,所以可以沿用前一篇字數組轉list的幾種方式

1. jdk支持方式

借助Collections.addAll來實現

public List<String> str2list2(String str, String split) {
    List<String> list = new ArrayList<>();
    Collections.addAll(list, str.split(split));
    return list;
}

上面這種方式適用于輸出String的列表,如果我希望轉成int列表呢?可以采用下面的方式

public List<Integer> str2intList(String str, String split) {
    return Stream.of(str.split(split))
            .map(String::trim)
            .filter(s -> !s.isEmpty())
            .map(Integer::valueOf).collect(Collectors.toList());
}

直接將數組轉換為流,然后基于jdk8的特性,來實現轉換為int列表

2. guava方式

引入依賴

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.1-jre</version>
</dependency>

除了使用jdk原生的方式之外,借助guava也是非常常見的的case了,主要通過Splitter來實現,寫法看起來非常秀

public List<String> str2list2(String str, String split) {
    return Splitter.on(split).splitToList(str);
}

簡單直接的一行代碼搞定,如果我們希望是對輸出的列表類型進行指定,也可以如下操作

public List<Integer> str2intListV2(String str, String split) {
    return Splitter.on(split).splitToStream(str)
            .map(String::trim).filter(s -> !s.isEmpty())
            .map(Integer::valueOf).collect(Collectors.toList());
}

3. apache-commons

引入依賴

 <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-collections4</artifactId>
    <version>4.4</version>
</dependency>

上面流的方式就很贊了,但是注意它是有jdk版本限制的,雖說現在基本上都是1.8以上的環(huán)境進行開發(fā),但也不排除有上古的代碼,比如我現在手上的項目,spring還是3…

如果我們不能使用流的方式,那么有什么簡單的方式來實現字符串轉換為指定類型的列表么?

public List<Integer> str2intListV3(String str, String split) {
    List<Integer> result = new ArrayList<>();
    CollectionUtils.collect(Arrays.asList(str.split(split)), new Transformer<String, Integer>() {
        @Override
        public Integer transform(String s) {
            return Integer.valueOf(s);
        }
    }, result);
    return result;
}

上面這個實現也沒有多優(yōu)雅,不過這里有個編程小技巧可以學習,new Transformer(){}的傳參方式,這種實現方式有點像回調的寫法,雖然他們有本質的區(qū)別,此外就是jdk8之后的函數方法,就充分的體現這種設計思路,比如上面的換成jdk8的寫法,直接簡化為

 
public List<Integer> str2intListV3(String str, String split) {
    List<Integer> result = new ArrayList<>();
    CollectionUtils.collect(Arrays.asList(str.split(split)), Integer::valueOf, result);
    return result;
}

II. 列表轉字符串

1. StringBuilder

最容易想到的,直接使用StringBuilder來實現拼接

public String list2str(List<String> list, String split) {
    StringBuilder builder = new StringBuilder();
    for (String str: list) {
        builder.append(str).append(split);
    }
    return builder.substring(0, builder.length() - 1);
}

注意兩點:

  • 使用StringBuilder而不是StringBuffer (why?)
  • 注意最后一個拼接符號不要

2. String.join

一個更簡單的實現方式如下

public String list2str2(List<String> list, String split) {
    return String.join(split, list);
}

當然上面這個的缺點就是列表必須是字符串列表,如果換成int列表,則不行

3. gauva

guava也提供了列表轉String的方式,同樣很簡單,而且還沒有列表類型的限制

public <T> String list2str3(List<T> list, String split) {
    return Joiner.on(split).join(list);
}

III. 小結

本文的考題也非常常見,列表與字符串的互轉,這里介紹了多種實現方式,有jdk原生的case(如果沒有什么限制,推薦使用它, String.split除外,原因后面再說),如果有更高級的定制場景,如非String類型類表,則可以考慮guava的Splitter/Joinner來實現

在上面的實現中,也提供了幾種有意思的編程方式

  • Stream: 流,jdk8之后非常常見了
  • 函數方法,回調寫法case

總結

到此這篇關于java實戰(zhàn)小技巧之字符串與容器互轉的文章就介紹到這了,更多相關java字符串與容器互轉內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • IDEA配置Maven并版本統(tǒng)一管理的實現

    IDEA配置Maven并版本統(tǒng)一管理的實現

    本文主要介紹了IDEA配置Maven并版本統(tǒng)一管理的實現,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • mybatis-plus3.0.1枚舉返回為null解決辦法

    mybatis-plus3.0.1枚舉返回為null解決辦法

    這篇文章主要介紹了mybatis-plus3.0.1枚舉返回為null解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Spring中的SpringApplicationRunListener詳細解析

    Spring中的SpringApplicationRunListener詳細解析

    這篇文章主要介紹了Spring中的SpringApplicationRunListener詳細解析,SpringApplicationRunListener是一個監(jiān)聽SpringApplication中run方法的接口,在項目啟動過程的各個階段進行事件的發(fā)布,需要的朋友可以參考下
    2023-11-11
  • 詳解redis與spring的整合(使用緩存)

    詳解redis與spring的整合(使用緩存)

    本篇文章主要介紹了redis與spring的整合(使用緩存),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 深入解析java中的值傳遞和引用傳遞

    深入解析java中的值傳遞和引用傳遞

    這篇文章主要介紹了深入解析java中的值傳遞和引用傳遞,值傳遞是將變量的值復制給另一個變量,兩個變量之間并沒有直接關系,引用傳遞是將變量的引用(內存地址)傳遞給另一個變量,兩個變量之間指向同一個內存地址,修改一個變量的值也會影響到另一個變量
    2023-07-07
  • Mybatis如何使用動態(tài)語句實現批量刪除(delete結合foreach)

    Mybatis如何使用動態(tài)語句實現批量刪除(delete結合foreach)

    這篇文章主要介紹了Mybatis如何使用動態(tài)語句實現批量刪除(delete結合foreach),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java  LinkedList源碼詳解及實例

    java LinkedList源碼詳解及實例

    這篇文章主要介紹了java LinkedList源碼詳解及實例的相關資料,需要的朋友可以參考下
    2017-03-03
  • Java基礎之詳細總結五種常用運算符

    Java基礎之詳細總結五種常用運算符

    在通常代碼邏輯處理中,我們常常都會使用到運算符,今天我們就詳細了解一下運算符的使用以及分類.運算符是對常量或者變量進行操作的符號,它分為算術運算符,賦值運算符,比較運算符,邏輯運算符以及位運算符.需要的朋友可以參考下
    2021-05-05
  • Java內部類應用之靜態(tài)內部類應用示例

    Java內部類應用之靜態(tài)內部類應用示例

    這篇文章主要介紹了Java內部類應用之靜態(tài)內部類應用,結合實例形式分析了Java靜態(tài)內部類的原理、功能、用法及相關操作注意事項,需要的朋友可以參考下
    2019-09-09
  • SpringBoot連接MYSQL數據庫并使用JPA進行操作

    SpringBoot連接MYSQL數據庫并使用JPA進行操作

    今天給大家介紹一下如何SpringBoot中連接Mysql數據庫,并使用JPA進行數據庫的相關操作。
    2017-04-04

最新評論

曲松县| 九龙县| 湘乡市| 大新县| 锡林郭勒盟| 和平县| 隆子县| 陵川县| 读书| 胶南市| 岑溪市| 防城港市| 明溪县| 泗洪县| 商河县| 石狮市| 永定县| 竹山县| 平阳县| 南皮县| 司法| 手游| 饶平县| 湖州市| 皋兰县| 孟州市| 津市市| 凤山市| 株洲市| 庆城县| 鄂尔多斯市| 永康市| 天柱县| 历史| 宜丰县| 博乐市| 和平县| 香港 | 大城县| 天峨县| 石柱|