Java 8 Stream:1个对象到2个对象

时间:2016-09-21 17:52:22

标签: java java-8 java-stream

是否可以使用Stream API执行类似的操作?

class A{
public:
    virtual ~A() = default;
    virtual void test(){ std::cout << "Ayyyyy" << std::endl;}

};

class B : public A {
public:
    virtual void test() override  {std::cout << "Beeeeeee" << std::endl;}

};

int main(){

    std::shared_ptr<A> p(new B[10], [](A* a){ delete [] a;});

    (p.get() + 2)->test();

}

我希望从三角形的三个边缘获得A点和B点并用.distinct消除重复

2 个答案:

答案 0 :(得分:2)

您可以使用Point生成所有边缘的所有flatMap的流,并使用distinct()删除重复项:

LinkedList<Point> l =
    EDGES.stream()
         .flatMap(e->Stream.of(e.p1,e.p2))
         .distinct()
         .collect(Collectors.toCollection(LinkedList::new);

答案 1 :(得分:0)

这样的东西
List<Point> l = EDGES.stream().flatMap(e -> Stream.of(e.p1, e.p2)).distinct().collect(Collectors.toList());

或使用Set

Set<Point> l = EDGES.stream().flatMap(e -> Stream.of(e.p1, e.p2)).collect(Collectors.toSet());