小编mal*_*are的帖子

CompletableFuture 并行执行几个线程,串行执行几个线程

我需要执行一些任务。有些任务是独立的,有些则依赖于其他任务的成功执行。独立的任务可以并行运行以获得更好的性能。我称这些任务为服务。该列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

5
推荐指数
1
解决办法
386
查看次数

通过Java 8 Streams API进行StringBuilder操作

我正在努力从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)

stringbuilder java-8 java-stream

1
推荐指数
1
解决办法
564
查看次数

Java 8 Streams.将两个参数传递给forEach中调用的方法

使用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)

java java-8 java-stream

1
推荐指数
1
解决办法
2354
查看次数