Rumah > Soal Jawab > teks badan
我现在有一个List<String> 我想使用lambda把这个list中的字符串全部循环拼接到一个字符串上,lambda可以实现么?该怎么做呢?
伊谢尔伦2017-04-17 17:51:11
Menggunakan foreach mempunyai kesan sampingan pada StringBuilder, yang tidak selaras dengan pengaturcaraan berfungsi. Anda boleh melakukan ini
String result = list.stream().collect(Collectors.joining(""));
PHP中文网2017-04-17 17:51:11
StringBuilder str = new StringBuilder();
list.forEach(item -> {
str.append(item);
});
Jawapan tambahan: Mengapakah str tidak boleh ditukar kepada Jenis rentetan dan penyambungan rentetan dicapai melalui str = str item
?
Kod di atas sebenarnya bersamaan dengan:
final StringBuilder str = new StringBuilder();
list.forEach(new Consumer<String>() {
@Override
public void accept(String item) {
str.append(item);
}
});
Iaitu, intipati Lambda sebenarnya ialah kelas dalaman tanpa nama, jadi str mestilah jenis akhir (tetapi akhir dalam kod boleh ditinggalkan) dan tidak boleh ditugaskan semula.
巴扎黑2017-04-17 17:51:11
Saya baru melihat email jemputan, dan maaf kerana lambat membalas sebenarnya, Saudara Chacha di atas sangat-sangat profesional dan tepat, tetapi sejak saya dijemput, saya berasa menyesal kerana tidak menulis dua ayat dalam ini. e-mel, jadi saya akan menyenaraikan kaedah penulisan umum saya Apabila saya keluar, saya merasakan bahawa saya telah memasuki keadaan pedantik di mana terdapat beberapa cara untuk menulis perkataan "hui". . . Saya harap anda tidak akan memarahi saya:
public static void join1(){
List<String> list = Arrays.asList("11","22","23");
//最传统写法:
StringBuilder sb = new StringBuilder();
for(String s : list){
sb.append(s);
}
System.out.println(sb.toString());
//如果想要加个分隔符,比如逗号,传统写法:
sb = new StringBuilder();
for(int i = 0; i < list.size(); i++){
sb.append(list.get(i));
if(i < list.size() - 1){
sb.append(",");
}
}
System.out.println(sb.toString());
//使用commons-lang库写法, 其实这个已经够简单了,就这个功能而言,我很喜欢,而且最最常用:
System.out.println(StringUtils.join(list.toArray(), ","));
//进入jdk8时代:
System.out.println(list.stream().collect(Collectors.joining()));
//jdk8时代,加个分隔符:
System.out.println(list.stream().collect(Collectors.joining(",")));
}
迷茫2017-04-17 17:51:11
Saya akan menggunakan rxJava sebagai contoh. Perkara yang sama berlaku dengan Penstriman java8:
StringBuilder sb = new StringBuilder();
rx.Observable.from(list).subscribe(sb::append);
Jika anda ingin menambah pemisah antara setiap item, gunakan Penstriman java8 kali ini:
String separator = ",";
StringBuilder sb = new StringBuilder();
Stream.of(list).forEach(item -> sb.append(item).append(separator));
sb.deleteCharAt(sb.length() - sepLen);