Суммируйте каждый элемент двух List <Integer>s в новый список - PullRequest
0 голосов
/ 22 октября 2018

Как объединить два списка в один список по включенному значению одного и того же индекса.У меня есть 2 списка, и я хочу объединить два списка по включенному значению одного и того же индекса.(Если возможно, пожалуйста, предложите мне путь java 8: потоки.)

List<String> a = Arrays.asList("1", "2", "3");
List<String> b = Arrays.asList("10", "20", "30");

Вывод:

{"11", "22", "33"}

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Решение, которое использует только стандартную библиотеку:

List<String> a = Arrays.asList("1", "2", "3");
List<String> b = Arrays.asList("10", "20", "30");

List<String> c = IntStream.range(0, a.size())
                          .map(i -> Integer.parseInt(a.get(i)) + Integer.parseInt(b.get(i)))
                          .mapToObj(Integer::toString)
                          .collect(Collectors.toList());

Обратите внимание, что входные данные хранят номера магазинов как String, как указано в вашем примере.Кроме того, вы можете объединить вызовы map() и mapToObj() в один вызов mapToObj(), но я хотел бы разделить его для ясности.

Также предполагается, что оба списка имеют одинаковый размер, если онине было, ArrayIndexOutOfBoundsException будет брошено.

0 голосов
/ 24 октября 2018

Если вы используете Eclipse Collections , вы можете использовать zip:

List<String> a = Arrays.asList("1", "2", "3");
List<String> b = Arrays.asList("10", "20", "30");
List<String> c = Lists.adapt(a).zip(b)
        .collectInt(p -> Integer.parseInt(p.getOne()) +Integer.parseInt(p.getTwo()))
        .collect(Integer::toString);

System.out.println(c);

Выход: [11, 22, 33]

Вы также можете использовать Collectors2 из EclipseКоллекции с Stream.

List<String> a = Arrays.asList("1", "2", "3");
List<String> b = Arrays.asList("10", "20", "30");
List<String> c = a.stream().collect(Collectors2.zip(b))
        .collectInt(p -> Integer.parseInt(p.getOne()) + Integer.parseInt(p.getTwo()))
        .collect(Integer::toString);

System.out.println(c);

Вывод: [11, 22, 33]

Примечание : я являюсь коммиттером для коллекций Eclipse.

0 голосов
/ 22 октября 2018

Вы пытались использовать zip?https://github.com/poetix/protonpack имеет хорошую библиотеку

StreamUtils.zip(a.stream(), b.stream(), (e1,e2) -> (Integer.parseInt(e1) + Integer.parseInt(e2)).toString())
...