繁体   English   中英

如何将List <Future <Object >>添加到Set <Object>?

[英]How to add List<Future<Object>> into Set<Object>?

在ExecutorService的开发过程中,有必要将List放入Set中。 如何才能做到这一点?

public class Executor {
    private Set<List<Future<Object>>> primeNumList = Collections.synchronizedSet(new TreeSet<>());

    Set<List<Future<Object>>> getPrimeNumList() {
        return primeNumList;
    }

    @SuppressWarnings("unchecked")
    public void setup(int min, int max, int threadNum) throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
        List<Callable<Object>> callableList = new ArrayList<>();

        for (int i = 0; i < threadNum; i++) {
            callableList.add(new AdderImmediately(min + i, max, threadNum));
        }
        List<Future<Object>> a = executorService.invokeAll(callableList);
        primeNumList.add(a); // here i try to add Future list into Set
        System.out.println(primeNumList);
        executorService.shutdown();
    }

我的类我处理值并通过call()返回它们。 之后,他们会从我希望将它们放入最终Set中的列表中进入列表

public class AdderImmediately implements Callable {
    private int minRange;
    private int maxRange;
    private Set<Integer> primeNumberList = new TreeSet<>();
    private int step;

    AdderImmediately(int minRange, int maxRange, int step) {
        this.minRange = minRange;
        this.maxRange = maxRange;
        this.step = step;
    }

    @Override
    public Object call() {
        fillPrimeNumberList(primeNumberList);
        return primeNumberList;
    }

    private void fillPrimeNumberList(Set<Integer> primeNumberList) {
        for (int i = minRange; i <= maxRange; i += step) {
            if (PrimeChecker.isPrimeNumber(i)) {
               primeNumberList.add(i);
            }
        }
    }
}

是否有可能实施? 因为我现在拥有的,我得到一个ClassCastException。 或者我不明白什么?)

例外:

Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.lang.Comparable
    at java.util.TreeMap.compare(TreeMap.java:1294)
    at java.util.TreeMap.put(TreeMap.java:538)
    at java.util.TreeSet.add(TreeSet.java:255)
    at java.util.Collections$SynchronizedCollection.add(Collections.java:2035)
    at Executor.setup(Executor.java:22)
    at Demo.main(Demo.java:47)

您无法在编译时捕获错误,因为您已使用@SuppressWarnings("unchecked") 删除它时,在此语句中有一个编译警告: callableList.add(new AdderImmediately(min + i, max, threadNum));

第二个问题是,在创建AdderImmediately类时,您没有使用泛型表单。 您正在返回,从call方法Set<Integer>类型。 如果在您的情况下使用正确的通用形式,即Callable<Set<Integer>> ,则问题在上面的行中变得清晰。 callableList的类型是List<Callable<Object>> 不能在其中添加Callable<Set<Integer>>类型的元素

因为您通过抑制一般警告添加了不正确类型的元素,所以您在运行时获得ClassCastException

我建议你阅读Effective Java 3rd Edition中关于Generics的章节,以便更好地理解这些概念。

如何将元素添加到 Object,List 的 hashmap<object><div id="text_translate"><p> 我有一个来自 dao 的列表,我想把这个列表放在一个 HashMap&gt; 中,我的列表可以包含一个服务,它有多个参数,比如 serviceId=3。 在我的最终 HashMap 中,结果如下所示: {Service 1=[100,A],Service 2=[101,A],Service 3=[Parameter[102,B],Parameter[103,B],Parameter[104,C]]} 。</p><pre> serviceId paramId type 1 100 A 2 101 A 3 102 B 3 103 B 3 104 C</pre><p> 服务.java</p><pre> private int id; //Getters+Setters</pre><p> 参数.java</p><pre> private int id; private String type; //Getters+Setters</pre><p> 测试.java</p><pre> List result = dao.getServiceParam(); HashMap&lt;Service,List&lt;Parameter&gt;&gt; mapList = new HashMap&lt;Service, List&lt;Parameter&gt;&gt;(); if(.result;isEmpty()) { for (int i=0. i&lt; result;size(). i++) { Object[] line = (Object[])result;get(i); if ((BigDecimal) line[0]!=null) { } } }</pre></div></object>

[英]How to add element to hashmap of Object,List<Object>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何迭代 Future<List> 对象? Set <Future <Object >>中的第一个对象,它满足谓词 Java 中 List 和 Set 接口如何添加和删除对象? 如何将对象添加到另一个对象集中 如何在另一个列表对象内添加对象 如何将元素添加到 Object,List 的 hashmap<object><div id="text_translate"><p> 我有一个来自 dao 的列表,我想把这个列表放在一个 HashMap&gt; 中,我的列表可以包含一个服务,它有多个参数,比如 serviceId=3。 在我的最终 HashMap 中,结果如下所示: {Service 1=[100,A],Service 2=[101,A],Service 3=[Parameter[102,B],Parameter[103,B],Parameter[104,C]]} 。</p><pre> serviceId paramId type 1 100 A 2 101 A 3 102 B 3 103 B 3 104 C</pre><p> 服务.java</p><pre> private int id; //Getters+Setters</pre><p> 参数.java</p><pre> private int id; private String type; //Getters+Setters</pre><p> 测试.java</p><pre> List result = dao.getServiceParam(); HashMap&lt;Service,List&lt;Parameter&gt;&gt; mapList = new HashMap&lt;Service, List&lt;Parameter&gt;&gt;(); if(.result;isEmpty()) { for (int i=0. i&lt; result;size(). i++) { Object[] line = (Object[])result;get(i); if ((BigDecimal) line[0]!=null) { } } }</pre></div></object> 如何将未来的未来变成一个未来的对象? 如何将对象添加到Java列表? 如何在 Spring 中向对象添加列表 如何将对象数组添加到列表
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM