我需要执行一些任务。有些任务是独立的,有些则依赖于其他任务的成功执行。独立的任务可以并行运行以获得更好的性能。我称这些任务为服务。该列link
说明哪些服务将串行执行,哪些服务将并行执行。专栏order
描述了一组定义的服务将遵循的执行顺序。对于下面的示例,服务 A 和 B 应该并行运行。如果它们已成功执行,则服务 C 将执行。请注意,服务 C 不直接依赖于其先前服务的输出,但它必须在成功执行其先前服务之后运行,因为服务 C 在其执行期间需要一些由其先前服务产生的数据。服务 C 成功执行后,下一个服务 D 将执行,如此循环下去,直到列表中的所有服务都被消费完。
Tasks service link order
Service A 01 03 1
Service B 02 03 2
Service C 03 04 3
Service D 04 05 4
Service E 05 07 5
Service F 06 07 6
Service G 07 (null) 7
Run Code Online (Sandbox Code Playgroud)
以下是我的代码。
public void executeTransactionFlow(DataVo dataVo) throws Exception {
List<Callable<Boolean>> threadList = new ArrayList<>();
List<String> serviceIds = new ArrayList<>();
List<Future<Boolean>> futureList;
String validatedRespCode …
Run Code Online (Sandbox Code Playgroud) java multithreading reactive-programming java-8 completable-future
我正在努力从StringBuilder中删除一些字符.该方法工作正常.但是,我希望通过Java-8流API实现相同的功能.目前的代码很冗长.有没有办法通过Java 8流API重构第二个方法removeCarryReturnsCharacters()?
private static StringBuilder readEntireFileUsingStream(Path filePath) throws IOException {
StringBuilder data = new StringBuilder(String.valueOf(Files.readAllLines(filePath, StandardCharsets.ISO_8859_1)));
return removeCarryReturnsCharacters(data);
}
private static StringBuilder removeCarryReturnsCharacters(StringBuilder fileData){
int endIndex = 1012;
String needToRemove = "";
long totDataChunkCount = fileData.length()/1014;
long delCounter = 1;
try{
while (delCounter < totDataChunkCount) {
needToRemove = fileData.substring(endIndex, endIndex + 2);
if (needToRemove.equals("^^")) {
fileData.delete(endIndex, endIndex + 2);
}
endIndex += 1012;
delCounter++;
}
}catch(StringIndexOutOfBoundsException exp){
throw exp;
}
return fileData;
}
Run Code Online (Sandbox Code Playgroud) 使用Java 8流API,我想要一种方法来调用一个接受两个参数的引用方法.splitFileByMaxRows
是一个应该采用a String
和a int
作为参数的引用方法.有没有办法实现它?
private void breakLargeFileIntoChunks(final File setlFile, int parentFileId) {
LOG.info(LOG.isInfoEnabled() ? "*** Breaking Large File Into Chunks ***" : null);
try (Chunker chunker = new Chunker();
Stream<String> lines = Files.lines(Paths.get(setlFile.getAbsolutePath()))) {
lines.forEach(chunker::splitFileByMaxRows);
}
catch (IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)