Java 8 forEach不保留顺序

时间:2019-03-26 08:27:45

标签: lambda foreach java-8

我面临一个问题,即Java 8 for-each循环在打印数据时不保留顺序。 基本上,我正在打印一套清单。列表的顺序未按顺序打印。

请建议是否可以在不更改基本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 :(得分:0)

集合通常是无序的,尤其是最常用的HashSet。 大多数的lamba操作都可以以任何顺序执行,甚至可以并行执行。 但是,直接在列表上的forEach会按顺序执行。

答案 1 :(得分:0)

您应该首先按支腿编号对实体进行排序 例如:

1