有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

eclipse StreamSupport collector和java 7

我试图使用StreamSupport来探索Java7上的流。我已将streamsupport-1.5.4.jar添加到我的项目中,并编写了如下代码:

import java8.util.stream.Collectors;

public class FinantialStatement {

    private List<Rubric> values;

    public List<Rubric> getConsolidatedRubrics() {
        List<Rubric> rubrics = values.stream().sorted((Rubric r1, Rubric r2) -> r1.getOrder().compareTo(r2.getOrder())).collect(Collectors.toCollection(ArrayList::new));
        return rubrics;
    }
}

我收到以下错误:

Type mismatch: cannot convert from Collector<Object,capture#1-of
?,Collection<Object>> to Collector<? super Rubric,A,R>

我已经尝试应用Eclipse提出的提示

Add cast to '(Collector<? super Rubric, A, R>)'

但这并没有解决问题

有人知道吗?谢谢


共 (1) 个答案

  1. # 1 楼答案

    java.util.Collection接收java8.util.stream.Streamstreamsupport入口点主要是

    1)java8.util.stream.StreamSupport#stream

    2)java8.util.stream.StreamSupport#parallelStream

    因此,您的代码片段应该如下所示:

    import java.util.ArrayList;
    import java.util.List;
    
    import java8.util.stream.Collectors;
    import java8.util.stream.StreamSupport;
    
    public class FinantialStatement {
    
        private List<Rubric> values;
    
        public List<Rubric> getConsolidatedRubrics() {
            List<Rubric> rubrics = StreamSupport.stream(values)
                    .sorted((Rubric r1, Rubric r2) -> r1.getOrder().compareTo(r2.getOrder()))
                    .collect(Collectors.toCollection(ArrayList::new));
            return rubrics;
        }
    }
    

    编辑

    显然你不能使用java.util.Collection#stream(),因为

    a) is a method that only exists in Java 8 and

    b) it mingles java.util.stream.Collectors with your (correct) java8.util.stream.Collectors import

    (免责声明:我是streamsupport的维护者)