代码:
package com.wjj.application.common.util;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Stream;
/**
* @author hank
* @since 2020/1/2 0002 下午 15:08
*/
public class StringUtils {
public static final String EMPTY = "";
private static final int STRING_BUILDER_SIZE = 256;
/**
* 拼接Collection : join(coll, CLASS:getField)的形式拼接
* @param coll 集合
* @param mapper CLASS:getField <br/>
* a <a href="package-summary.html#NonInterference">non-interfering</a>,
* <a href="package-summary.html#Statelessness">stateless</a>
* function to apply to each element
* @param separator 分隔符
* @param defaultVal coll为空时的默认值
* @param <T>
* @param <R>
* @return 拼接后的字符串, 全是空(null,或者空字符串)时返回空字符串
*/
public static <T, R> String join(Collection<T> coll, Function<? super T, ? extends R> mapper, String separator, String defaultVal){
if(coll == null || coll.isEmpty()){
return defaultVal;
}
if (separator == null) {
separator = EMPTY;
}
Stream<R> stream = coll.stream().map(mapper);
Iterator<R> iterable = stream.iterator();
return joinNoNeedEmpty(iterable, separator);
// final StringBuilder buf = new StringBuilder(coll.size() * 16);
// boolean isFirst = true;
// while (iterable.hasNext()){
// if(!isFirst){
// buf.append(separator);
// }else{
// isFirst = false;
// }
// buf.append(iterable.next());
// }
// return buf.toString();
}
/**
* 拼接Collection : join(coll, CLASS:getField)的形式拼接<br/>
* 这里默认的分隔符为空,当coll为空时返回空字符串
* @param coll 集合
* @param mapper CLASS:getField <br/>
* a <a href="package-summary.html#NonInterference">non-interfering</a>,
* <a href="package-summary.html#Statelessness">stateless</a>
* function to apply to each element
* @param <T>
* @param <R>
* @return 拼接后的字符串
*/
public static <T, R> String join(Collection<T> coll, Function<? super T, ? extends R> mapper){
return join(coll, mapper, null, EMPTY);
}
/**
* 连接字符串,不需要null 和 ""
* @return 全是空(null,或者空字符串)时返回空字符串
*/
public static String joinNoNeedEmpty(final Iterator<?> iterator, final String separator) {
final Object first = iterator.next();
if (!iterator.hasNext()) {
return Objects.toString(first, EMPTY);
}
// two or more elements
final StringBuilder buf = new StringBuilder(STRING_BUILDER_SIZE); // Java default is 16, probably too small
buf.append(Objects.toString(first, EMPTY));
while (iterator.hasNext()){
Object nowText = iterator.next();
if( nowText != null && !nowText.toString().equals(EMPTY)){
if(buf.length()>0) {
buf.append(separator);
}
buf.append(nowText);
}
}
return buf.toString();
}
/**
* 测试
* @param args
*/
// public static void main(String[] args) {
// List<MedicalHistoryFeatureDTO> medicalHistoryFeatures = Arrays.asList(
// new MedicalHistoryFeatureDTO(){{
// setName("1");
// }},new MedicalHistoryFeatureDTO(){{
// setName("2");
// }}
// );
// List<MedicalHistoryFeatureDTO> medicalHistoryFeatures1 = Arrays.asList(
// new MedicalHistoryFeatureDTO(){{
// setName(null);
// }},new MedicalHistoryFeatureDTO(){{
// setName("");
// }}
// );
// List<MedicalHistoryFeatureDTO> medicalHistoryFeatures2 = Arrays.asList(
// new MedicalHistoryFeatureDTO(){{
// setName("");
// }},new MedicalHistoryFeatureDTO(){{
// setName("");
// }}
// );
// List<MedicalHistoryFeatureDTO> medicalHistoryFeatures3 = Arrays.asList(
// new MedicalHistoryFeatureDTO(){{
// setName(null);
// }},new MedicalHistoryFeatureDTO(){{
// setName(null);
// }}
// );
// List<MedicalHistoryFeatureDTO> medicalHistoryFeatures4 = Arrays.asList(
// new MedicalHistoryFeatureDTO(){{
// setName(null);
// }},new MedicalHistoryFeatureDTO(){{
// setName("1");
// }},new MedicalHistoryFeatureDTO(){{
// setName(null);
// }},new MedicalHistoryFeatureDTO(){{
// setName("2");
// }},new MedicalHistoryFeatureDTO(){{
// setName("");
// }},new MedicalHistoryFeatureDTO(){{
// setName("10");
// }}
// );
// System.out.println(join(medicalHistoryFeatures, MedicalHistoryFeatureDTO::getName, null, ""));
// System.out.println(join(medicalHistoryFeatures1, MedicalHistoryFeatureDTO::getName, null, ""));
// System.out.println(join(medicalHistoryFeatures2, MedicalHistoryFeatureDTO::getName, null, ""));
// System.out.println(join(medicalHistoryFeatures, MedicalHistoryFeatureDTO::getName, ",", ""));
// System.out.println(join(medicalHistoryFeatures1, MedicalHistoryFeatureDTO::getName, ",", ""));
// System.out.println(join(medicalHistoryFeatures2, MedicalHistoryFeatureDTO::getName, ",", ""));
// System.out.println(join(medicalHistoryFeatures3, MedicalHistoryFeatureDTO::getName, ",", ""));
// System.out.println(join(medicalHistoryFeatures4, MedicalHistoryFeatureDTO::getName, ",", ""));
// System.out.println(joinNoNeedEmpty(Arrays.asList("", "", null, "", null,"1","2",null, "43", "", "", null, "", "57").iterator(), ","));
// System.out.println(joinNoNeedEmpty(Arrays.asList("", "", null, "", null, 1).iterator(), ","));
// }
}