Как объединить логи c, используя Java 8 потоков, чтобы добавить в список на основе условия размера списка - PullRequest
0 голосов
/ 07 января 2020

Возможно ли объединить ниже, используя Java 8 потоков, что, если есть какое-то значение для getCount (), тогда продолжайте добавлять элементы в тот же список, пока размер списка не станет больше, чем getCount ().

List<RequestObject> li = results().map(req -> new RequestObject(req())).collect(Collectors.toList());

if(Objects.nonNull(getCount())){
    while(li.size() <= getCount()) {
        li.addAll(li);
    }
}

Ответы [ 3 ]

0 голосов
/ 07 января 2020

Это должно сделать это.

        List<Integer> list = IntStream.iterate(0, i -> i < getCount(), i -> i+1)
                .map(b -> getNext()).boxed()
                .collect(Collectors.toList());
        System.out.println(list);


        public static int getCount() {
           return 10;
        }
        k = 0;

        public static int getNext() {
          k += 10;
          return k;
        }
0 голосов
/ 07 января 2020

Попробуйте создать новую коллекцию на основе li:

List<RequestObject> collect = IntStream.range(0, getCount())
        .mapToObj(i -> li.get(i % li.size()))
        .collect(Collectors.toList());

ОБНОВЛЕНИЕ

Я предположил, что то, что вы хотите, может быть показано в этом примере (где getCount() равно count):

List<String> li = new ArrayList<>(List.of("a", "b", "c"));
int count = 2;
List<String> collect = IntStream.range(0, count)
        .mapToObj(i -> li.get(i % li.size()))
        .collect(Collectors.toList());

Тогда вы получите:

[a, b]

и, например, count = 10:

[a, b, c, a, b, c, a, b, c, a]
0 голосов
/ 07 января 2020

Если вам разрешено использовать Java 9, он обеспечивает dropWhile(predicate) и takeWhile(predicate) для потоков.

int count = 0;
List<RequestObject> li = results()
                         .map(mapping)
                         .takeWhile(obj -> {count++ <= getCount()});

EDIT : в случае Java 8 Вы можете взглянуть на этот ответ

...