Java 8 forEach не сохраняя порядок - PullRequest
0 голосов
/ 26 марта 2019

Я столкнулся с проблемой, когда цикл Java 8 for-each не сохраняет порядок при печати данных. По сути, я печатаю Список Наборов. Порядок списка не распечатывается по порядку.

Пожалуйста, предложите, если я могу заказать вывод, не меняя его на базовый для каждого цикла.

Пример кода:

AtomicInteger row = new AtomicInteger(1);
//entities is a List
entities.forEach(entity -> {
    if (Optional.ofNullable(entity.getSet()).isPresent()) {
        entity.getSet().forEach(obj -> {
            try {
                int column = 0;
                addData(sheet, column++, row, nullToBlankString(entity.getName()));
                addData(sheet, column++, row, convertLongToString(obj.getLegNumber()));
                addData(sheet, column++, row, nullToBlankString(obj.getType()));
            } catch (WriteException e) {
                logger.error("Exception" + e.getCause().getMessage());
            }
            row.getAndIncrement();
        });
    }
});

private void addData(WritableSheet sheet, int column, AtomicInteger row, String s)
    throws RowsExceededException, WriteException {
    Label label;
    label = new Label(column, row.get(), s, times);
    sheet.addCell(label);
}

Токовый выход: Он печатает вывод без заказа. enter image description here

Ожидаемый результат: Следует печатать строки в порядке номера LEG enter image description here

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Вы должны сначала отсортировать объекты по номеру, например:

Collections.sort(entities, (o1, o2) -> o1.getLegNumber().compareTo(o2.getLegNumber()));
0 голосов
/ 26 марта 2019

Набор обычно неупорядочен, особенно наиболее используемый HashSet. Большинство операций lamba разрешено выполнять в любом порядке, возможно, даже параллельно. Однако forEach непосредственно в списке работает по порядку.

...