给定N个Ni元素列表,我需要为每个元素调用给定方法:

process(element);


按顺序处理每个列表的所有Ni元素,完成后,我必须知道已处理了哪些元素,哪些抛出了Exception。

是否有任何已经实施的执行器可以获取任务列表,将它们按顺序处理并跟踪失败?

最佳答案

最简洁的答案是不。

长答案:不,因为用不到20行代码即可轻松实现:

   public static void main(String[] args) {


    List<Integer> elements = Arrays.asList(1, 2, 3, 5, 8, 13);
    ExecutorService executor = Executors.newSingleThreadExecutor();

    List<Future<Integer>> results = elements.stream().map((e) -> {

        return executor.submit(() -> {
            // Fail for even numbers
            if (e % 2 == 0) {
                throw new RuntimeException();
            }

            return e;
        });

    }).collect(Collectors.toList());

    results.forEach((e) -> {
        try {
            System.out.println(e.get());
        } catch (InterruptedException | ExecutionException e1) {
            System.out.println(false);
        }
    });
}


将输出:

1
false
3
5
false
13

10-07 12:30
查看更多