如何在java里java字符串数组合并成一个数组?

Python032

如何在java里java字符串数组合并成一个数组?,第1张

java里java字符串数组合并成一个数组方法如下:

//方法一 Arrays类

String[] a = {"A","B","C"}

String[] b = {"D","E"}

// List<String>list = Arrays.asList(a)  --OK

// List<String>list = Arrays.asList("A","B","C")--OK

// list.add("F")--UnsupportedOperationException

// list.remove("A")--UnsupportedOperationException

// list.set(1,"javaee")--OK (因为是把数组转为集合,其本质还是数组,数组长度固定不变,但内容可以改变)

// 结论:虽然可以把数组转为集合,但是集合长度不能改变

List list = new ArrayList(Arrays.asList(a))

list.addAll(Arrays.asList(b))

String[] str = new String[list.size()]

list.toArray(str)

for(int x=0x<str.lengthx++){

System.out.print(str[x] + " ")

}

//方法二 循环遍历

// 两个数组合并

String[] str1 = {"Hello","world","java"}

String[] str2 = {"Veriable","syntax","interator"}

String[] newStr = new String[str1.length+str2.length]

//newStr = str1数组是引用类型

for(int x=0x<str1.lengthx++){

newStr[x] = str1[x]

}

for(int y=0y<str2.lengthy++){

newStr[str1.length+y]=str2[y]

}

for(int y=0y<newStr.lengthy++){

System.out.println(newStr[y] + " ")

  }

// 方法三

String[] str1 = {"Hello","world","java"}

String[] str2 = {"Veriable","syntax","interator"}

int str1Length = str1.length

int str2length = str2.length

str1 = Arrays.copyOf(str1, str1Length+str2length)//数组扩容

System.arraycopy(str2, 0, str1, str1Length, str2length)

System.out.println(Arrays.toString(str1))

java8中stream的提供了一个拼接流的方法Stream.concat,可以将两个stream拼接成一个stream, 保持了两个stream中的元素顺序。

那么如果我们需要对多个集合中的元素拼接成一个stream来统一处理,可以怎么做呢?

比如有三个Collection<String>c1, c2, c3.

方法一,使用Stream.concat方法来拼接,可以使用一个for循环来处理。

private static Stream<String> concat1(List<Collection<String>>collections) {

Stream result = Stream.empty()

for (Collection<String>strings : collections) {

              result = Stream.concat(result,  strings.stream())

}

return   result

}

方法二,使用flatMap方法,将集合变成stream, 再压平

private static Stream<String> concat2(List<Collection<String>>collections) {

return  collections.stream()

           .flatMap(Collection::stream)

}

对于不同集合类型的数据,如何做成一个统一的流?还是可以使用flatMap方法来做

方法三:

private static Stream<String> concat3(List<String>s1,String[] s2, Set<String>s3) {

return  Stream.of(s1.stream(), Arrays.stream(s2), s3.stream())

           .flatMap(Function.identity())

}

方法三和方法二相比,可以使用不同类型的集合类型来拼接流,方法二在拥有共同基类的情况下使用会显得简洁很多。

下面的例子讲了如何合并两个java list, 用简单的方法,而不用自己去造轮子,循环list 去做,用如下建档方法:

import java.util.ArrayListimport java.util.Listpublic class JoinList {  

public static void main(String[] args) {      

List<String>listA = new ArrayList<String>()        listA.add("A")

List<String>listB = new ArrayList<String>()        listB.add("B")

List<String>listFinal = new ArrayList<String>

()        listFinal.addAll(listA)        listFinal.addAll(listB)

//same result        //List<String>listFinal = new ArrayList<String>

(listA)        //listFinal.addAll(listB)

System.out.println("listA : " + listA)        System.out.println("listB : " + listB)        System.out.println("listFinal : " + listFinal)

}}

你可以看到结果如下:

listA : [A]listB : [B]listFinal : [A, B]

其实最关键的就是调用 list 的 addall 方法,apache 的 listUtil  , 里面有个 union 方法,其实也是用的 addall 方法。