Java 8 forEach不保留顺序

问题描述 投票:0回答:2

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

请建议我是否可以在不将其更改为基本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的顺序打印行

lambda foreach java-8
2个回答
0
投票

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


0
投票

你应该先用legnumber ex对实体进行排序:

Collections.sort(entities, (o1, o2) -> o1.getLegNumber().compareTo(o2.getLegNumber()));
© www.soinside.com 2019 - 2024. All rights reserved.