尽管使用了供应商,但“ IllegalStateException:流已被操作或关闭”

时间:2019-12-18 20:15:35

标签: java stream illegalstateexception

基本上,我得到了一个包含位置列表的企鹅数据流,每个位置都有一个ID,该ID指向哪个企鹅访问了该位置。然后,我想返回一个企鹅对象流,其中每个对象都包含该企鹅的ID和该企鹅去过的所有位置的列表。

我的方法是先创建一个包含所有ID的新Stream,然后遍历原始流,并将每个位置(地理位置)添加到具有相同ID的列表中,然后创建一个具有所有geos的企鹅对象并添加到企鹅列表,然后对IDstream中的每个ID重复此操作。 到目前为止,这就是我的代码:

public static Stream<Penguin> getDataByTrackId(Stream<PenguinData> stream) {
    List<Geo> geo = new ArrayList<>();
    List<Penguin> result=new ArrayList<>();
    List<String> IDs=new ArrayList<>();
    Supplier<Stream<PenguinData>> streamSupplier= () -> stream;

    //create stream with all trackIDs
    Iterator<PenguinData> itr=streamSupplier.get().iterator();
    while (itr.hasNext()==true) {
        IDs.add(((PenguinData)itr.next()).trackID);
    }
    Stream<String> tempStream=IDs.stream().distinct();
    Supplier<Stream<String>> idStreamSupplier = () -> tempStream;

    //iterate through stream, create list with all locations (geo), 
    //then create penguin object with these locations and add them to a list
    itr=streamSupplier.get().iterator();
    String tempString;

    Iterator<String> iter=idStreamSupplier.get().iterator();
    Iterator<String> iter2=idStreamSupplier.get().iterator();

    Iterator<PenguinData> iter8=streamSupplier.get().iterator();
    Iterator<PenguinData> iter9=streamSupplier.get().iterator();

    while (iter.hasNext()==true) {
        tempString=(String)iter.next();
        while (itr.hasNext()==true) {
            if (((PenguinData)itr.next()).trackID==tempString) {
                Geo tempGeo=new Geo(((PenguinData)iter8.next()).latitude, ((PenguinData)iter9.next()).longitude);
                geo.add(tempGeo);
            }
        }
        Penguin tempPenguin=new Penguin(geo, iter2.next());
        result.add(tempPenguin);
        geo=new ArrayList<>();
    }
    return result.stream();
  }

我知道这不是最漂亮的代码,我甚至不确定它是否最终可以工作,但是现在我在“ itr = streamSupplier.get()。iterator();”处收到一个IllegalStateException。老实说,我不知道为什么会这样,也没有在网上找到任何东西。 (另外,如果可以重复使用迭代器,请告诉我,我只创建了很多迭代器。)

0 个答案:

没有答案