欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

每天一個(gè)實(shí)戰(zhàn)小技巧:字符串與Collection的互轉(zhuǎn)

將字符串轉(zhuǎn)換為L(zhǎng)ist,這種業(yè)務(wù)場(chǎng)景可以說(shuō)非常非常常見了,實(shí)現(xiàn)方式也比較簡(jiǎn)單

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

那么除了上面這種實(shí)現(xiàn)方式之外,還有其他的么?

I. 字符串轉(zhuǎn)列表

上面的實(shí)現(xiàn)姿勢(shì)相當(dāng)于字符串先轉(zhuǎn)數(shù)組,然后在通過(guò)數(shù)組轉(zhuǎn)列表,所以可以沿用前一篇字?jǐn)?shù)組轉(zhuǎn)list的幾種方式

1. jdk支持方式

借助Collections.addAll來(lái)實(shí)現(xiàn)

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

上面這種方式適用于輸出String的列表,如果我希望轉(zhuǎn)成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());
}

直接將數(shù)組轉(zhuǎn)換為流,然后基于jdk8的特性,來(lái)實(shí)現(xiàn)轉(zhuǎn)換為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了,主要通過(guò)Splitter來(lái)實(shí)現(xiàn),寫法看起來(lái)非常秀

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

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

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版本限制的,雖說(shuō)現(xiàn)在基本上都是1.8以上的環(huán)境進(jìn)行開發(fā),但也不排除有上古的代碼,比如我現(xiàn)在手上的項(xiàng)目,spring還是3…

如果我們不能使用流的方式,那么有什么簡(jiǎn)單的方式來(lái)實(shí)現(xiàn)字符串轉(zhuǎn)換為指定類型的列表么?

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;
}

上面這個(gè)實(shí)現(xiàn)也沒(méi)有多優(yōu)雅,不過(guò)這里有個(gè)編程小技巧可以學(xué)習(xí),new Transformer(){}的傳參方式,這種實(shí)現(xiàn)方式有點(diǎn)像回調(diào)的寫法,雖然他們有本質(zhì)的區(qū)別,此外就是jdk8之后的函數(shù)方法,就充分的體現(xiàn)這種設(shè)計(jì)思路,比如上面的換成jdk8的寫法,直接簡(jiǎn)化為

 
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. 列表轉(zhuǎn)字符串

1. StringBuilder

最容易想到的,直接使用StringBuilder來(lái)實(shí)現(xiàn)拼接

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);
}

注意兩點(diǎn):

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

2. String.join

一個(gè)更簡(jiǎn)單的實(shí)現(xiàn)方式如下

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

當(dāng)然上面這個(gè)的缺點(diǎn)就是列表必須是字符串列表,如果換成int列表,則不行

3. gauva

guava也提供了列表轉(zhuǎn)String的方式,同樣很簡(jiǎn)單,而且還沒(méi)有列表類型的限制

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

III. 小結(jié)

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

在上面的實(shí)現(xiàn)中,也提供了幾種有意思的編程方式

  • Stream: 流,jdk8之后非常常見了
  • 函數(shù)方法,回調(diào)寫法case

總結(jié)

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

相關(guān)文章

  • 通過(guò)AOP環(huán)繞通知如何實(shí)現(xiàn)事務(wù)控制

    通過(guò)AOP環(huán)繞通知如何實(shí)現(xiàn)事務(wù)控制

    這篇文章主要介紹了通過(guò)AOP環(huán)繞通知如何實(shí)現(xiàn)事務(wù)控制的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot項(xiàng)目打包并部署到Tomcat上及報(bào)錯(cuò)處理方案

    springboot項(xiàng)目打包并部署到Tomcat上及報(bào)錯(cuò)處理方案

    這篇文章主要介紹了springboot項(xiàng)目打包并部署到Tomcat上及報(bào)錯(cuò)處理方案,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • JAVA中的靜態(tài)代理、動(dòng)態(tài)代理以及CGLIB動(dòng)態(tài)代理總結(jié)

    JAVA中的靜態(tài)代理、動(dòng)態(tài)代理以及CGLIB動(dòng)態(tài)代理總結(jié)

    本篇文章主要介紹了JAVA中的靜態(tài)代理、動(dòng)態(tài)代理以及CGLIB動(dòng)態(tài)代理總結(jié),具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • jmeter下載及安裝配置教程(win10平臺(tái)為例)

    jmeter下載及安裝配置教程(win10平臺(tái)為例)

    Apache?JMeter是Apache組織開發(fā)的基于Java的壓力測(cè)試工具,Apache?jmeter?可以用于對(duì)靜態(tài)的和動(dòng)態(tài)的資源(文件,Servlet,Perl腳本,java?對(duì)象,數(shù)據(jù)庫(kù)和查詢,F(xiàn)TP服務(wù)器等等)的性能進(jìn)行測(cè)試,本文給大家介紹jmeter下載及安裝配置過(guò)程,感興趣的朋友一起看看吧
    2021-12-12
  • java中Lamda表達(dá)式講解

    java中Lamda表達(dá)式講解

    本文詳細(xì)講解了java中的Lamda表達(dá)式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作

    java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作

    這篇文章主要介紹了java通過(guò)cglib動(dòng)態(tài)生成實(shí)體bean的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • java導(dǎo)出大批量(百萬(wàn)以上)數(shù)據(jù)的excel文件

    java導(dǎo)出大批量(百萬(wàn)以上)數(shù)據(jù)的excel文件

    這篇文章主要為大家詳細(xì) 介紹了java導(dǎo)出大批量即百萬(wàn)以上數(shù)據(jù)的excel文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • springboot 如何重定向redirect 并隱藏參數(shù)

    springboot 如何重定向redirect 并隱藏參數(shù)

    這篇文章主要介紹了springboot 如何重定向redirect 并隱藏參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • selenium + ChromeDriver安裝及使用方法

    selenium + ChromeDriver安裝及使用方法

    這篇文章主要介紹了selenium + ChromeDriver安裝及使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-06-06
  • 詳解SpringCloud微服務(wù)之Rest

    詳解SpringCloud微服務(wù)之Rest

    今天帶大家學(xué)習(xí)SpringCloud微服務(wù)之Rest的有關(guān)知識(shí),文中有非常詳細(xì)的介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05

最新評(píng)論