項目實戰--Stream流實現字符串拼接


需求說明

概述:前端頁面查詢列表中有個“二級類目”的多選下拉框,用戶選擇二級類目后,需要從后台數據庫查詢條件內的數據。 
目標:將前端頁面傳入后端的字符串例如"女性護理,美妝工具,口腔護理" 拼接為 ('女性護理','美妝工具','口腔護理')。

xxVo.java

/**
 * 添加二級類目字段以及Getter和Setter方法
 */
private String secondCateNames;
 
public String getSecondCateNames() {
   return secondCateNames;
}
 
public void setSecondCateNames(String secondCateNames) {
   this.secondCateNames = secondCateNames;
}

Mapper.java

//二級類目查詢
 //方法一
if (StringUtils.isNoneBlank(vo.getSecondCateNames())) {
      String[] strArr = vo.getSecondCateNames().split(",");
      StringBuilder strBuilder = new StringBuilder();
      for (int i = 0; i < strArr.length; i++) {
          strBuilder.append("'").append(strArr[i]).append("'").append(",");
      }
      sql.append(" AND eod.second_cate_name in (" 
              + strBuilder.substring(0, strBuilder.length()-1 ) + ")");
  }
  //方法二 運用Java8中的Stream表達式(推薦),告別For循環
  if (StringUtils.isNotBlank(vo.getSecondCateNames())) {
     //拼接前后單引號
     String[] split = vo.getSecondCateNames().split(",");
     List<String> secondCateNameList = Arrays.asList(split).stream().filter(Objects::nonNull)
        .map(secondCateName -> "'" + secondCateName + "'").collect(Collectors.toList());
     sql.append(" AND eod.second_cate_name in (")
        .append(StringUtils.join(secondCateNameList, ",")).append(")");
  }
 其中最后使用的StringUtils.join(final Iterable<?> iterable, final String separator)等價於使用
joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix),該方法接受一個字符串序列作為拼接符,並在拼接完成后添加傳遞的前綴和后綴。
//方法一
sql.append(" AND eod.second_cate_name in (").append(StringUtils.join(secondCateNameList, ",")).append(")");
//方法二
sql.append(" AND eod.second_cate_name in ").append(secondCateNameList.stream().collect(Collectors.joining(",","(",")")));

 實例DEMO

/**
 * @author liao.wenhui
 * @date 2019/7/15 10:49 
 * 目標是將"女性護理,美妝工具,口腔護理" -> ('女性護理','美妝工具','口腔護理')
 */
public class secondCateNameList {
  public static void main(String[] args) {
      //假設前端用戶在多選框勾選后傳入后端VO的二級類目字符串為secondCateNames
      String secondCateNames = "女性護理,美妝工具,口腔護理";

      //將字符串轉換成數組,使用apache的StringUtils.split(string,char)
      String[] split = StringUtils.splitString(secondCateNames,",");

      //使用Stream轉換,過濾,用單引號進行拼接。
      List<String> secondCateNameList = Arrays.asList(split).stream().filter(Objects::nonNull)
            .map(secondCateName -> "'" + secondCateName + "'").collect(Collectors.toList());
      System.out.println("secondCateNameList:"+secondCateNameList);

      //將集合轉換成字符串
      //方法一:join(Collection var0, String var1)
      String a = StringUtils.join(secondCateNameList, ",");
      System.out.println("AND eod.second_cate_name in("+ a + ")");
      //方法二:joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
      String b = secondCateNameList.stream().collect(Collectors.joining(",","(",")"));
      System.out.println("AND eod.second_cate_name in"+ b);
    }
}

 

如您對Java8中的Stream流不熟悉,可閱讀博主--雨點的名字寫的Java8 Stream

 成長的速度,一定要超過父母老去的速度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM