我正面临一个问题,即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);
}
集合通常是无序的,尤其是最常用的HashSet。大多数lamba操作都允许以任何顺序执行,甚至可以并行执行。然而,直接在列表上的forEach按顺序执行。
你应该先用legnumber ex对实体进行排序:
Collections.sort(entities, (o1, o2) -> o1.getLegNumber().compareTo(o2.getLegNumber()));