日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

面試題

在之前的內(nèi)容中我們介紹了字符串。同時,也介紹了字符串的拼接操作,并且分析了幾種字符串拼接方式的原理。其實在JAVA8中還提供了一種新的字符串操作方式。就是今天我們要來深入討論的stringJoiner。

import java.util.StringJoiner;public class Test {public static void main(String[] args) {StringJoiner joiner;

與其他的字符串操作不同的是,這個類的包是來自于java.util.StringJoiner,通過IDEA分析可以看到在這個類中提供了如下的一些方法操作。根據(jù)慣例來自于java.util包下的內(nèi)容一般可以理解為一個工具類。這也就是為什么這個類與其他字符串類型不同的原因。


 


用法講解

首先我們先來創(chuàng)建一個測試類,通過測試類的操作來講解這個StringJoiner的用法,代碼如下。


public class Test {public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner("Hello");stringJoiner.add("World");stringJoiner.add("架構師面試");System.out.println(stringJoiner.toString());StringJoiner stringJoiner1 = new StringJoiner(":","[","]");stringJoiner1.add("Hello").add("World").add("字符串操作");System.out.println(stringJoiner1.toString());

運行結果如下


 

結合上面的內(nèi)容,可以知道,在StringJoiner類中提供了兩個構造函數(shù),有5個公有的方法,而其中使用最多的方法就是add方法和toString方法。下面我們就來看看add方法的實現(xiàn)原理。

add原理

add()方法源碼如下

public StringJoiner add(CharSequence newElement) {prepareBuilder().Append(newElement);return this;private StringBuilder prepareBuilder() {if (value != null) {value.append(delimiter);} else {value = new StringBuilder().append(prefix);return value;

會看到這里使用的也是StringBuilder來進行字符串操作。分析源碼可以知道,其實使用StringJoiner和直接使用StringBuilder是一樣的。那么為什么還要多此一舉地實現(xiàn)開發(fā)這樣一個類操作呢?

StringJoiner分析

如果在實際開發(fā)中遇到這樣一個操作,我們要將一個數(shù)組中的所有對象拼接成一個大的字符串對象,那么我們應該如何去操作呢?

結合之前的分析,我們可以循環(huán)數(shù)組對象,并且使用StringBuilder進行拼接。

StringBuilder builder = new StringBuilder();if (!list.isEmpty()) {builder.append(list.get(0));for (int i = 1, n = list.size(); i < n; i++) {builder.append(",").append(list.get(i));builder.toString();

當然我們還可以使用Java8中提供lambda表達式來進行操作。代碼如下。其實操作和循環(huán)操作實現(xiàn)的方式是一樣的。

list.stream().reduce(new StringBuilder(), (sb, s) -> sb.append(s).append(','), StringBuilder::append).toString();

還可以使用我們最不推薦的方式在循環(huán)中使用+的方式來進行拼接。

這些操作都可以完成上面的內(nèi)容,但是由于涉及到循環(huán),所以說整體的效率都不是太高。

為了提升操作效率StringJoiner類就出現(xiàn)了。首先我們來分析一個類Collectors,java.util.stream.Collectors實現(xiàn)各種有用的縮減操作的Collector的實現(xiàn),例如將元素累積到集合中,根據(jù)各種標準匯總元素等。通過這個類中的joining()方法代碼如下。

public static Collector joining() {return new CollectorImpl(StringBuilder::new, StringBuilder::append,(r1, r2) -> { r1.append(r2); return r1; },StringBuilder::toString, CH_NOID);public static Collector joining(CharSequence delimiter,CharSequence prefix,CharSequence suffix) {return new CollectorImpl<>(() -> new StringJoiner(delimiter, prefix, suffix),StringJoiner::add, StringJoiner::merge,StringJoiner::toString, CH_NOID);

將這個方法與stream()方法進行結合,也就是在Java8中提供的一些高級用法。

list.stream().collect(Collectors.joining(":"))

會發(fā)現(xiàn)在joining()方法中不但使用了StringBuilder還使用了StringJoiner。最終的效果都是實現(xiàn)高效。

總結

這篇文章主要介紹了Java8中對于字符串操作的一些高級用法,但是盡管是高級用法也只是以提升開發(fā)效率為目的,這些高級用法都可以使用基本用法來代替,只是在日常的開發(fā)中為了提升開發(fā)效率。我們會采用一些高級用法,但是想要理解這些高級用法還要基礎知識做支持,希望大家多多關注,后續(xù)會為大家?guī)砀嗟母韶泝?nèi)容。

分享到:
標簽:Java8
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定