Использую библиотеку apache poi для транспонирования строк в Excel
Пул потоков в разы медленнее работает, чем без ExecutorService, в чем может быть проблема?
public class MainTranspose {
public static void main(String[] args) throws IOException, InvalidFormatException, InterruptedException, ExecutionException {
try( FileInputStream inputStream = new FileInputStream(new File("hello.xlsx"));
Workbook workbook = new XSSFWorkbook(inputStream);
FileOutputStream fileOut = new FileOutputStream("hello.xlsx") ) {
Sheet sheet = workbook.getSheetAt(workbook.getActiveSheetIndex());
String name = sheet.getSheetName();
long befor2 = System.currentTimeMillis();
//multiThredTranspose(sheet, workbook);
ExecutorService pool = Executors.newFixedThreadPool(4);
Future<?> future = pool.submit(() -> multiThredTranspose(sheet, workbook));
future.get();
pool.shutdown();
long res2 = System.currentTimeMillis() - befor2;
workbook.setSheetName(workbook.getActiveSheetIndex(), name);
workbook.write(fileOut);
System.out.println(res2);
}
}
protected static void multiThredTranspose(Sheet sheet, Workbook workbook) {
int numberOfSheet = workbook.getActiveSheetIndex();
Sheet newSheet = workbook.createSheet();
for ( Row row : sheet ) {
row.forEach((Cell cell) -> {
CellAddress address = cell.getAddress();
int column = address.getColumn();
int rowNum = address.getRow();
copyToSheet(newSheet, column, rowNum, cell);
});
}
workbook.removeSheetAt(numberOfSheet);
}
protected static void copyToSheet(Sheet sheet, int col, int row, Cell cell) {
if ( sheet.getRow(col) == null ) {
sheet.createRow(col);
}
Cell cell1 = sheet.getRow(col).createCell(row);
toSetCell(cell, cell1);
}
private static void toSetCell(Cell oldCell, Cell newCell) {
switch ( oldCell.getCellTypeEnum() ) {
case NUMERIC:
if ( DateUtil.isCellDateFormatted(oldCell) ) {
newCell.setCellValue(oldCell.getDateCellValue());
} else {
newCell.setCellValue(oldCell.getNumericCellValue());
}
break;
case STRING:
newCell.setCellValue(oldCell.getRichStringCellValue().getString());
break;
case BOOLEAN:
newCell.setCellValue(oldCell.getBooleanCellValue());
break;
case BLANK:
newCell.setAsActiveCell();
break;
case FORMULA:
newCell.setCellValue(oldCell.getCellFormula());
break;
case _NONE:
throw new UnsupportedOperationException("Unsupported cell type '" + oldCell.getCellTypeEnum() + "'");
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я хочу использовать визульаный эффект ripple в Андроид от 16 APIСтандартаня Ripple от гугла не подходит
как осуществить НЕЦЕНТРАЛЬНОЕ столкновение двух шаров на java Нужен именно метод с прописанными формулами так как все остальное есть
Есть андроид приложение со страничкой аккаунта, на которой есть RecyclerView, который в свою очередь содержит скиллы, которыми обладает пользователь