2016-10-28 1 views
-4

Мы можем использовать String.join, чтобы объединить список строк разделителем.Элегантный способ объединения массивов массивов строк двумя разными разделителями в java потоком

Теперь у меня есть массив массивов строк.

например

[(a, b), (c, d), (e,f)], 

Я хочу присоединиться к a&b, c&d, e&f двоеточием, а пространство между этими парами.

как

a:b c:d e:f 

Есть элегантный способ сделать это?

Развейте:

Если вы делаете это с петлей вложен с другим контуром, то вы создаете много переменных Струнные в бассейне, который не выглядит очень хорошо

+0

Ответ на самом деле не отличается, вы просто добавляете петлю в цикл через массивы. – Hypino

+0

Вы говорите, что хотите присоединиться к ним через запятую и пробелы, но затем вы используете пример с двоеточием. Я не понимаю – jthort

+0

@Hypino Если вы делаете это с петлей, вложенной в другой цикл, тогда вы создаете много переменных String в вашем пуле, что выглядит не очень хорошо. –

ответ

0

С Java 8 вы можете просто поместите их в сборщик строк. Просто сделайте это для «внутренних» массивов и снова на результатах.

String[][] stringsss = new String[][] { 
    {"a", "b"}, 
    {"c", "d"}, 
    {"e", "f"} 
}; 
String result = Arrays.stream(stringsss) 
    .map(e -> Arrays.stream(e).collect(Collectors.joining(":"))) 
    .collect(Collectors.joining(" ")); 
System.out.println(result); 
+0

Интересно, создает ли это много промежуточных строк в пуле строк, который мне неинтересен. Если да, есть ли лучший способ избежать этого? –

+0

Быстрый просмотр 'java.util.StringJoiner' показывает, что он использует' java.lang.StringBuilder' внутри. Вы получаете один промежуточный результат на «внутренний» массив, а затем есть конечный результат. Если вы хотите более эффективный способ, вам нужно использовать циклы. Затем вы можете самостоятельно контролировать буферизацию. – Brian

+0

ОК. Спасибо за Ваш ответ. Я знаю, что мы можем использовать два вложенных StringBuilders для этого, но мне просто не нравятся промежуточные строки, созданные из первого StringBuilder: p –

Смежные вопросы