гугл гуавы гнездящийся столяр - PullRequest
4 голосов
/ 06 октября 2011

Joiner в Google Guava (расширенный набор из коллекции Google) действительно крутой.Мой вопрос заключается в том, есть ли простой способ иметь дело с вложенными коллекциями?Например, у меня есть матрица, представляющая собой список строк, а каждая строка представляет собой список чисел:

List<ArrayList<Integer>> matrix = Lists.newArrayList( //
            Lists.newArrayList(1, 2, 3), //
            Lists.newArrayList(4, 5, 6), //
            Lists.newArrayList(7, 8, 9));

Я хочу вывести эту матрицу, используя новую строку в качестве разделителя строк и ",«в качестве разделителя для числа.То есть:

1, 2, 3
4, 5, 6
7, 8, 9

Если это всего лишь одна строка, я могу просто использовать некоторый код, например "Joiner.on (", "). Nums".Для этого вложенного случая я должен зациклить все строки.

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

Спасибо!

Ответы [ 2 ]

5 голосов
/ 06 октября 2011

Циклы мне кажутся нормальными.Тем не менее, вы могли бы сделать:

// implementation is simple enough
public static Function<Iterable<?>, String> joinFunction(Joiner joiner) { ... }

String string = Joiner.on('\n').join(
    Iterables.transform(matrix, joinFunction(Joiner.on(", "))));

Вы теряете некоторую эффективность там, хотя вы не можете добавить весь текст к одному StringBuilder, и я думаю,цикл, вероятно, будет легче понять.

0 голосов
/ 23 декабря 2015

В Java 8 можно использовать лямбду:

String s = matrix.stream()
            .map(row -> row.stream().map(Object::toString).collect(Collectors.joining(",")))
            .collect(Collectors.joining("\n"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...