আমার String
জাভাতে দুটি অ্যারে যুক্ত করতে হবে ।
void f(String[] first, String[] second) {
String[] both = ???
}
এই কাজ করতে সবচেয়ে সহজ পদ্ধিতি হল উপায় কি?
array1 + array2
বক্তব্য রাখেনি।
আমার String
জাভাতে দুটি অ্যারে যুক্ত করতে হবে ।
void f(String[] first, String[] second) {
String[] both = ???
}
এই কাজ করতে সবচেয়ে সহজ পদ্ধিতি হল উপায় কি?
array1 + array2
বক্তব্য রাখেনি।
উত্তর:
ভাল পুরানো অ্যাপাচি কমন্স ল্যাং লাইব্রেরি থেকে আমি একটি লাইন সমাধান পেয়েছি।
ArrayUtils.addAll(T[], T...)
কোড:
String[] both = ArrayUtils.addAll(first, second);
এখানে একটি সহজ পদ্ধতি যা দুটি অ্যারে সংযুক্ত করে ফলাফলটি ফিরিয়ে দেবে:
public <T> T[] concatenate(T[] a, T[] b) {
int aLen = a.length;
int bLen = b.length;
@SuppressWarnings("unchecked")
T[] c = (T[]) Array.newInstance(a.getClass().getComponentType(), aLen + bLen);
System.arraycopy(a, 0, c, 0, aLen);
System.arraycopy(b, 0, c, aLen, bLen);
return c;
}
মনে রাখবেন যে এটি আদিম ডেটা ধরণের সাথে কাজ করবে না, কেবলমাত্র বস্তুর প্রকারের সাথে।
নিম্নলিখিত সামান্য জটিল সংস্করণ উভয় অবজেক্ট এবং আদিম অ্যারে নিয়ে কাজ করে। এটি আর্গুমেন্ট টাইপের T
পরিবর্তে ব্যবহার করে এটি করে T[]
।
ফলাফলের উপাদান ধরণের হিসাবে সর্বাধিক সাধারণ প্রকারটি বাছাই করে দুটি পৃথক ধরণের অ্যারেগুলি সংযুক্ত করাও এটি সম্ভব করে তোলে।
public static <T> T concatenate(T a, T b) {
if (!a.getClass().isArray() || !b.getClass().isArray()) {
throw new IllegalArgumentException();
}
Class<?> resCompType;
Class<?> aCompType = a.getClass().getComponentType();
Class<?> bCompType = b.getClass().getComponentType();
if (aCompType.isAssignableFrom(bCompType)) {
resCompType = aCompType;
} else if (bCompType.isAssignableFrom(aCompType)) {
resCompType = bCompType;
} else {
throw new IllegalArgumentException();
}
int aLen = Array.getLength(a);
int bLen = Array.getLength(b);
@SuppressWarnings("unchecked")
T result = (T) Array.newInstance(resCompType, aLen + bLen);
System.arraycopy(a, 0, result, 0, aLen);
System.arraycopy(b, 0, result, aLen, bLen);
return result;
}
এখানে একটি উদাহরণ:
Assert.assertArrayEquals(new int[] { 1, 2, 3 }, concatenate(new int[] { 1, 2 }, new int[] { 3 }));
Assert.assertArrayEquals(new Number[] { 1, 2, 3f }, concatenate(new Integer[] { 1, 2 }, new Number[] { 3f }));
Array.newInstance(a.getClass().getComponentType(), aLen + bLen);
। আমি আশ্চর্যজনকভাবে এর আগে কখনও দেখিনি। @ বিউদেটে আমি মনে করি যে টীকাটি কেন দমন করা হচ্ছে তা বিবেচনা করে এখানে টীকাটি ঠিক আছে।
এমন একটি সম্পূর্ণ জেনেরিক সংস্করণ লেখা সম্ভব যা কোনও সংখ্যক অ্যারে সংযুক্ত করতে এমনকি বাড়ানো যেতে পারে। এই সংস্করণগুলির জাভা 6 প্রয়োজন যেমন তারা ব্যবহার করেArrays.copyOf()
উভয় সংস্করণ কোনও মধ্যস্থতাকারী List
অবজেক্ট তৈরি করা এড়াতে পারে এবং System.arraycopy()
বড় অ্যারেগুলি অনুলিপি করা যত তাড়াতাড়ি সম্ভব তা নিশ্চিত করার জন্য ব্যবহার করে।
দুটি অ্যারে এটির মতো দেখাচ্ছে:
public static <T> T[] concat(T[] first, T[] second) {
T[] result = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
এবং একটি নির্বিচার সংখ্যক অ্যারে (> = 1) এর জন্য এটি দেখতে এটির মতো দেখাচ্ছে:
public static <T> T[] concatAll(T[] first, T[]... rest) {
int totalLength = first.length;
for (T[] array : rest) {
totalLength += array.length;
}
T[] result = Arrays.copyOf(first, totalLength);
int offset = first.length;
for (T[] array : rest) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
T
সঙ্গে byte
(এবং হারান <T>
)।
ByteBuffer buffer = ByteBuffer.allocate(array1.length + array2.length); buffer.put(array1); buffer.put(array2); return buffer.array();
concat(ai, ad)
, যেখানে ai
হয় Integer[]
এবং ad
হয় Double[]
। (এই ক্ষেত্রে, টাইপ পরামিতি সংকলক দ্বারা <T>
সমাধান করা <? extends Number>
হয়।) তৈরি Arrays.copyOf
অ্যারে প্রথম অ্যারের উপাদান ধরণ থাকবে, Integer
উদাহরণস্বরূপ। যখন ফাংশনটি দ্বিতীয় অ্যারের অনুলিপি করতে চলেছে তখন একটি ArrayStoreException
নিক্ষেপ করা হবে। সমাধানটি অতিরিক্ত Class<T> type
প্যারামিটার রাখার জন্য।
Stream
জাভা 8 এ ব্যবহার করা:
String[] both = Stream.concat(Arrays.stream(a), Arrays.stream(b))
.toArray(String[]::new);
বা এটির মতো ব্যবহার করে flatMap
:
String[] both = Stream.of(a, b).flatMap(Stream::of)
.toArray(String[]::new);
জেনেরিক টাইপের জন্য এটি করতে আপনাকে প্রতিবিম্ব ব্যবহার করতে হবে:
@SuppressWarnings("unchecked")
T[] both = Stream.concat(Arrays.stream(a), Arrays.stream(b)).toArray(
size -> (T[]) Array.newInstance(a.getClass().getComponentType(), size));
.boxed()
প্রকারের হয় তবে এটি পরামিতি হিসাবে পাস করা যায় না । Stream
IntStream
Stream.concat
a
এবং যদি b
হয় তবে int[]
ব্যবহার করুনint[] both = IntStream.concat(Arrays.stream(a), Arrays.stream(b)).toArray();
System.arrayCopy
। তবে বিশেষভাবে ধীর হয় না। আপনি সম্ভবত এই একটি যা করতে হবে খুব সঙ্গে অনেকবার বিশাল ক্ষেত্রে বিন্যাসগুলির সত্যিই ব্যাপার সঞ্চালনের সময় পার্থক্য জন্য কর্মক্ষমতা সংবেদনশীল প্রেক্ষিতে।
বা প্রিয় পেয়ারার সাথে :
String[] both = ObjectArrays.concat(first, second, String.class);
এছাড়াও, আদিম অ্যারেগুলির জন্য সংস্করণ রয়েছে:
Booleans.concat(first, second)
Bytes.concat(first, second)
Chars.concat(first, second)
Doubles.concat(first, second)
Shorts.concat(first, second)
Ints.concat(first, second)
Longs.concat(first, second)
Floats.concat(first, second)
আপনি কোডের দুটি লাইনে দুটি অ্যারে সংযুক্ত করতে পারেন।
String[] both = Arrays.copyOf(first, first.length + second.length);
System.arraycopy(second, 0, both, first.length, second.length);
এটি একটি দ্রুত এবং দক্ষ সমাধান এবং আদিম ধরণের জন্য কাজ করবে পাশাপাশি জড়িত দুটি পদ্ধতির ওভারলোড করা রয়েছে।
অ্যারেলিস্ট, স্ট্রিম ইত্যাদির সাথে জড়িত সমাধানগুলি আপনার এড়ানো উচিত কারণ এগুলির কোনও কার্যকর উদ্দেশ্যে অস্থায়ী মেমরি বরাদ্দ করতে হবে।
আপনার for
বড় অ্যারেগুলির জন্য লুপগুলি এড়ানো উচিত কারণ এগুলি দক্ষ নয়। বিল্ট ইন পদ্ধতিগুলিতে অত্যন্ত দ্রুত গতিযুক্ত ব্লক-অনুলিপি ফাংশন ব্যবহার করা হয়।
জাভা এপিআই ব্যবহার করে:
String[] f(String[] first, String[] second) {
List<String> both = new ArrayList<String>(first.length + second.length);
Collections.addAll(both, first);
Collections.addAll(both, second);
return both.toArray(new String[both.size()]);
}
both.toArray(new String[0])
করা তত দ্রুততর হবে both.toArray(new String[both.size()])
, এমনকি এটি আমাদের নির্বোধ অন্তর্দৃষ্টিগুলির সাথে বৈপরীত্যও করে। এজন্যই অনুকূলিতকরণের সময় প্রকৃত কর্মক্ষমতা পরিমাপ করা এত গুরুত্বপূর্ণ। অথবা আরও সহজ সরল কনস্ট্রাক্ট ব্যবহার করুন, যখন আরও জটিল ভেরিয়েন্টের সুবিধা প্রমাণ করা যায় না।
একটি সমাধান 100% পুরাতন জাভা এবং ছাড়াই System.arraycopy
(উদাহরণস্বরূপ GWT ক্লায়েন্টে উপলব্ধ নয়):
static String[] concat(String[]... arrays) {
int length = 0;
for (String[] array : arrays) {
length += array.length;
}
String[] result = new String[length];
int pos = 0;
for (String[] array : arrays) {
for (String element : array) {
result[pos] = element;
pos++;
}
}
return result;
}
null
চেক যোগ করতে চাইতে পারেন । এবং সম্ভবত আপনার কিছু ভেরিয়েবল সেট করুন final
।
null
চেকগুলি এনপিই- র দেখানোর পরিবর্তে লুকিয়ে রাখবে এবং স্থানীয় যুদ্ধগুলির জন্য ফাইনাল ব্যবহারের কোনও সুবিধা নেই (এখনও)।
আমি সম্প্রতি অতিরিক্ত মেমরি ঘোরানোর জন্য সমস্যার সাথে লড়াই করেছি। যদি একটি এবং / বা খ সাধারণভাবে শূন্য হিসাবে পরিচিত হয়, তবে সিলভার্টবের কোডের আরও একটি অভিযোজন এখানে দেওয়া হয়েছে (উত্পন্নও করা হয়েছে):
private static <T> T[] concatOrReturnSame(T[] a, T[] b) {
final int alen = a.length;
final int blen = b.length;
if (alen == 0) {
return b;
}
if (blen == 0) {
return a;
}
final T[] result = (T[]) java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), alen + blen);
System.arraycopy(a, 0, result, 0, alen);
System.arraycopy(b, 0, result, alen, blen);
return result;
}
সম্পাদনা: এই পোস্টের পূর্ববর্তী সংস্করণে বলা হয়েছে যে অ্যারের পুনরায় ব্যবহারের মতো স্পষ্টতই নথিভুক্ত করা হবে। মার্টেন মন্তব্যগুলিতে যেমন উল্লেখ করেছেন তবে সাধারণভাবে কেবলমাত্র বিবৃতিগুলি সরিয়ে ফেলা ভাল হবে, যাতে ডকুমেন্টেশন থাকার প্রয়োজনীয়তার প্রয়োজন হয় না। কিন্তু তারপরে আবার, যদি বিবৃতিগুলি প্রথম স্থানে এই বিশেষ অপ্টিমাইজেশনের পুরো বিন্দু ছিল। আমি এই উত্তরটি এখানে রেখে দেব, তবে সাবধান!
System.arraycopy
অ্যারের বিষয়বস্তু অনুলিপি করে?
if
বিবৃতি ছেড়ে দেওয়া সহজ সমাধান হবে।
প্রায়োগিক জাভা লাইব্রেরি একটি অ্যারের রাপার ক্লাস সংযুক্তকরণের মত কুশলী পদ্ধতি অ্যারে equips যে হয়েছে।
import static fj.data.Array.array;
...এবং তারপর
Array<String> both = array(first).append(array(second));
মোড়কজাত অ্যারেটি ফিরে পেতে কল করুন
String[] s = both.array();
ArrayList<String> both = new ArrayList(Arrays.asList(first));
both.addAll(Arrays.asList(second));
both.toArray(new String[0]);
both.toArray(new String[both.size()])
জেনেরিক্স পুনঃনির্মাণিত সহ সিলভার্টব এর সমাধানটির এখানে একটি রূপান্তরকরণ রয়েছে:
static <T> T[] concat(T[] a, T[] b) {
final int alen = a.length;
final int blen = b.length;
final T[] result = (T[]) java.lang.reflect.Array.
newInstance(a.getClass().getComponentType(), alen + blen);
System.arraycopy(a, 0, result, 0, alen);
System.arraycopy(b, 0, result, alen, blen);
return result;
}
দ্রষ্টব্য: জাভা 6 সমাধানের জন্য জোচিমের উত্তর দেখুন । এটি কেবল সতর্কতা দূর করে না; এটি আরও খাটো, আরও দক্ষ এবং পড়া সহজ!
আপনি যদি এইভাবে ব্যবহার করেন তবে আপনার কোনও তৃতীয় পক্ষের শ্রেণি আমদানির দরকার নেই।
আপনি যদি সম্মতি চান String
দুটি স্ট্রিং অ্যারে সংক্ষিপ্তকরণের জন্য নমুনা কোড
public static String[] combineString(String[] first, String[] second){
int length = first.length + second.length;
String[] result = new String[length];
System.arraycopy(first, 0, result, 0, first.length);
System.arraycopy(second, 0, result, first.length, second.length);
return result;
}
আপনি যদি সম্মতি চান Int
দুটি পূর্ণসংখ্যার অ্যারে সংক্ষিপ্ত কোডের জন্য নমুনা কোড
public static int[] combineInt(int[] a, int[] b){
int length = a.length + b.length;
int[] result = new int[length];
System.arraycopy(a, 0, result, 0, a.length);
System.arraycopy(b, 0, result, a.length, b.length);
return result;
}
এখানে মেইন মেথড
public static void main(String[] args) {
String [] first = {"a", "b", "c"};
String [] second = {"d", "e"};
String [] joined = combineString(first, second);
System.out.println("concatenated String array : " + Arrays.toString(joined));
int[] array1 = {101,102,103,104};
int[] array2 = {105,106,107,108};
int[] concatenateInt = combineInt(array1, array2);
System.out.println("concatenated Int array : " + Arrays.toString(concatenateInt));
}
}
আমরাও এইভাবে ব্যবহার করতে পারি।
ইতিমধ্যে এই দীর্ঘ তালিকায় আরও একটি সংস্করণ যুক্ত করার জন্য দয়া করে আমাকে ক্ষমা করুন। আমি প্রতিটি উত্তরের দিকে তাকিয়ে সিদ্ধান্ত নিয়েছি যে আমি স্বাক্ষরটিতে মাত্র একটি প্যারামিটার সহ একটি সংস্করণ চাই। অপ্রত্যাশিত ইনপুট ক্ষেত্রে বুদ্ধিমান তথ্যের সাহায্যে প্রাথমিক ব্যর্থতা থেকে উপকার পেতে কিছু যুক্তি যাচাই করেছিলাম।
@SuppressWarnings("unchecked")
public static <T> T[] concat(T[]... inputArrays) {
if(inputArrays.length < 2) {
throw new IllegalArgumentException("inputArrays must contain at least 2 arrays");
}
for(int i = 0; i < inputArrays.length; i++) {
if(inputArrays[i] == null) {
throw new IllegalArgumentException("inputArrays[" + i + "] is null");
}
}
int totalLength = 0;
for(T[] array : inputArrays) {
totalLength += array.length;
}
T[] result = (T[]) Array.newInstance(inputArrays[0].getClass().getComponentType(), totalLength);
int offset = 0;
for(T[] array : inputArrays) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
আপনি এটিকে অ্যারেলিস্টে রূপান্তর করতে চেষ্টা করতে পারেন এবং অ্যাডএল পদ্ধতিটি ব্যবহার করে আবার অ্যারেতে রূপান্তর করতে পারেন।
List list = new ArrayList(Arrays.asList(first));
list.addAll(Arrays.asList(second));
String[] both = list.toArray();
সিলভার্টাব দ্বারা লিখিত সিউডো কোড সমাধানের কার্যকরী কোডের এখানে একটি সম্ভাব্য বাস্তবায়ন।
ধন্যবাদ সিলভার্টব!
public class Array {
public static <T> T[] concat(T[] a, T[] b, ArrayBuilderI<T> builder) {
T[] c = builder.build(a.length + b.length);
System.arraycopy(a, 0, c, 0, a.length);
System.arraycopy(b, 0, c, a.length, b.length);
return c;
}
}
এরপরে নির্মাতা ইন্টারফেসটি অনুসরণ করা হবে।
দ্রষ্টব্য: একজন নির্মাতা প্রয়োজনীয় কারণ জাভাতে এটি করা সম্ভব নয়
new T[size]
জেনেরিক ধরণের ক্ষয়ের কারণে:
public interface ArrayBuilderI<T> {
public T[] build(int size);
}
এখানে একটি কংক্রিট নির্মাতা ইন্টারফেস প্রয়োগ করছে, একটি Integer
অ্যারে তৈরি করছে:
public class IntegerArrayBuilder implements ArrayBuilderI<Integer> {
@Override
public Integer[] build(int size) {
return new Integer[size];
}
}
এবং শেষ পর্যন্ত আবেদন / পরীক্ষা:
@Test
public class ArrayTest {
public void array_concatenation() {
Integer a[] = new Integer[]{0,1};
Integer b[] = new Integer[]{2,3};
Integer c[] = Array.concat(a, b, new IntegerArrayBuilder());
assertEquals(4, c.length);
assertEquals(0, (int)c[0]);
assertEquals(1, (int)c[1]);
assertEquals(2, (int)c[2]);
assertEquals(3, (int)c[3]);
}
}
কি দারুন! বাহ্যিক নির্ভরতার উপর নির্ভর করে এমন কিছু সাধারণ জবাব সহ এখানে অনেক জটিল উত্তর। এটি কিভাবে এটি সম্পর্কে:
String [] arg1 = new String{"a","b","c"};
String [] arg2 = new String{"x","y","z"};
ArrayList<String> temp = new ArrayList<String>();
temp.addAll(Arrays.asList(arg1));
temp.addAll(Arrays.asList(arg2));
String [] concatedArgs = temp.toArray(new String[arg1.length+arg2.length]);
এটি কাজ করে তবে আপনার নিজের ত্রুটি পরীক্ষা করে inোকানো দরকার।
public class StringConcatenate {
public static void main(String[] args){
// Create two arrays to concatenate and one array to hold both
String[] arr1 = new String[]{"s","t","r","i","n","g"};
String[] arr2 = new String[]{"s","t","r","i","n","g"};
String[] arrBoth = new String[arr1.length+arr2.length];
// Copy elements from first array into first part of new array
for(int i = 0; i < arr1.length; i++){
arrBoth[i] = arr1[i];
}
// Copy elements from second array into last part of new array
for(int j = arr1.length;j < arrBoth.length;j++){
arrBoth[j] = arr2[j-arr1.length];
}
// Print result
for(int k = 0; k < arrBoth.length; k++){
System.out.print(arrBoth[k]);
}
// Additional line to make your terminal look better at completion!
System.out.println();
}
}
এটি সম্ভবত সবচেয়ে দক্ষ নয়, তবে এটি জাভার নিজস্ব API ছাড়া অন্য কোনও কিছুর উপর নির্ভর করে না।
for
সাথে দ্বিতীয় লুপটি প্রতিস্থাপন করা ভাল হবে :for(int j = 0; j < arr2.length; j++){arrBoth[arr1.length+j] = arr2[j];}
String[] arrBoth = java.util.Arrays.copyOf(arr1, arr1.length + arr2.length)
প্রথম for
লুপটি এড়িয়ে যেতে ব্যবহার করুন । আকারের সাথে আনুপাতিক সময় সাশ্রয় করে arr1
।
এটি স্ট্রিং অ্যারের জন্য রূপান্তরিত ফাংশন:
public String[] mergeArrays(String[] mainArray, String[] addArray) {
String[] finalArray = new String[mainArray.length + addArray.length];
System.arraycopy(mainArray, 0, finalArray, 0, mainArray.length);
System.arraycopy(addArray, 0, finalArray, mainArray.length, addArray.length);
return finalArray;
}
কিভাবে সহজভাবে
public static class Array {
public static <T> T[] concat(T[]... arrays) {
ArrayList<T> al = new ArrayList<T>();
for (T[] one : arrays)
Collections.addAll(al, one);
return (T[]) al.toArray(arrays[0].clone());
}
}
এবং শুধু কি Array.concat(arr1, arr2)
। যতক্ষণ arr1
এবং arr2
একই ধরণের হয়, এটি আপনাকে একই ধরণের আরেকটি অ্যারে দেয় যেখানে উভয় অ্যারে রয়েছে।
public String[] concat(String[]... arrays)
{
int length = 0;
for (String[] array : arrays) {
length += array.length;
}
String[] result = new String[length];
int destPos = 0;
for (String[] array : arrays) {
System.arraycopy(array, 0, result, destPos, array.length);
destPos += array.length;
}
return result;
}
জোছিম সউরের কনক্যাটএল-এর আমার সামান্য উন্নত সংস্করণ এখানে। এটি জাভা 5 বা 6 তে কাজ করতে পারে, জাভা 6 এর সিস্টেম.আর্রাইকপি ব্যবহার করে এটি রানটাইম এ উপলব্ধ থাকলে। এই পদ্ধতিটি (আইএমএইচও) অ্যান্ড্রয়েডের জন্য উপযুক্ত, কারণ এটি অ্যান্ড্রয়েড <9 -এ কাজ করে (যার সিস্টেম.আররেইকপি নেই) তবে সম্ভব হলে দ্রুত পদ্ধতিটি ব্যবহার করবে।
public static <T> T[] concatAll(T[] first, T[]... rest) {
int totalLength = first.length;
for (T[] array : rest) {
totalLength += array.length;
}
T[] result;
try {
Method arraysCopyOf = Arrays.class.getMethod("copyOf", Object[].class, int.class);
result = (T[]) arraysCopyOf.invoke(null, first, totalLength);
} catch (Exception e){
//Java 6 / Android >= 9 way didn't work, so use the "traditional" approach
result = (T[]) java.lang.reflect.Array.newInstance(first.getClass().getComponentType(), totalLength);
System.arraycopy(first, 0, result, 0, first.length);
}
int offset = first.length;
for (T[] array : rest) {
System.arraycopy(array, 0, result, offset, array.length);
offset += array.length;
}
return result;
}
প্রশ্নটি সম্পর্কে চিন্তা করার আরও একটি উপায়। দুই বা ততোধিক অ্যারে সংমিশ্রিত করার জন্য আপনাকে প্রতিটি অ্যারের সমস্ত উপাদান তালিকাবদ্ধ করতে হবে এবং তারপরে একটি নতুন অ্যারে তৈরি করতে হবে। এটি একটি তৈরি করা List<T>
এবং তারপরে কল toArray
করার মতো শোনাচ্ছে । কিছু অন্যান্য উত্তর ব্যবহার করে ArrayList
, এবং এটি ঠিক আছে। তবে কীভাবে আমাদের নিজের বাস্তবায়ন? এটি কঠিন নয়:
private static <T> T[] addAll(final T[] f, final T...o){
return new AbstractList<T>(){
@Override
public T get(int i) {
return i>=f.length ? o[i - f.length] : f[i];
}
@Override
public int size() {
return f.length + o.length;
}
}.toArray(f);
}
আমি বিশ্বাস করি যে উপরেরটি সমাধানগুলির সমতুল্য System.arraycopy
। তবে আমি মনে করি এটির একটি নিজস্ব সৌন্দর্য আছে।
কেমন :
public String[] combineArray (String[] ... strings) {
List<String> tmpList = new ArrayList<String>();
for (int i = 0; i < strings.length; i++)
tmpList.addAll(Arrays.asList(strings[i]));
return tmpList.toArray(new String[tmpList.size()]);
}
কেবল জাভাসের নিজস্ব এপিআই ব্যবহার করে:
String[] join(String[]... arrays) {
// calculate size of target array
int size = 0;
for (String[] array : arrays) {
size += array.length;
}
// create list of appropriate size
java.util.List list = new java.util.ArrayList(size);
// add arrays
for (String[] array : arrays) {
list.addAll(java.util.Arrays.asList(array));
}
// create and return final array
return list.toArray(new String[size]);
}
এখন, এই কোডটি সবচেয়ে কার্যকর নয়, তবে এটি কেবল মানক জাভা শ্রেণীর উপর নির্ভর করে এবং এটি সহজেই বোঝা যায়। এটি যে কোনও সংখ্যক স্ট্রিং [] (এমনকি শূন্য অ্যারে) এর জন্য কাজ করে।