一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1258|回复: 3
收起左侧

[算法题] Flatten iterator 怎么做?

[复制链接] |试试Instant~ |关注本帖
hfzhangql 发表于 2014-9-29 10:05:22 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
给一个iterator,里面每个元素是个list的iterator,要实现一个iterator
例如:
input:Iterator<Iterator<T>>
          iterator:1,2,3
          iterator:4,5,6
实现iterator:1,2,3,4,5,6

给好了接口不知道如何下手,自己从头写还行,请大家帮忙下,写几行代码最好,谢谢~

public class FlattenIterator {
        public static void main(String args[]) throws Exception {
                List<Iterator<String>> lists = new ArrayList<>();
                lists.add(Arrays.asList("a", "b", "c").iterator());
                lists.add(null);
                lists.add(Arrays.<String>asList().iterator());
                lists.add(Arrays.asList("d", "e").iterator());
                lists.add(Arrays.<String>asList().iterator());
               
                Iterator<Iterator<String>> iters = lists.iterator();
                Iterator<String> flattened = flatten(iters);
                while (flattened.hasNext()) {
                        System.out.println(flattened.next());
                }
        }

        /** @return Iterator which flattens the given arguments */
        public static Iterator<String> flatten(Iterator<Iterator<String>> iters) {
                return new Iterator<String>() {       
                        public boolean hasNext() {
                                // implement
                                return false;
                        }

                        public String next() {
                                // implement
                                return null;
                        }

                        public void remove() {
                                throw new UnsupportedOperationException();
                        }
                };
        }
}

评分

1

查看全部评分

austurela 发表于 2014-9-29 11:31:14 | 显示全部楼层
本帖最后由 austurela 于 2014-9-29 11:59 编辑

Please ignore...
回复 支持 反对

使用道具 举报

北美农民 发表于 2014-9-29 11:52:47 | 显示全部楼层
  1.   public static Iterator<String> flatten(final Iterator<Iterator<String>> iters) {
  2.       return new Iterator<String>() {
  3.         private Iterator<String> curIter = null;
  4.         private String nextItem = advanceItem();
  5.         
  6.         private String advanceItem() {
  7.           if (iters == null && curIter == null) throw new NullPointerException();
  8.             
  9.           while ((iters != null && iters.hasNext()) || (curIter != null && curIter.hasNext())) {
  10.             if ((curIter == null || !curIter.hasNext()))
  11.               if (iters != null && iters.hasNext())
  12.                 curIter = iters.next();

  13.             if (curIter == null) continue;
  14.             
  15.             while (curIter.hasNext()) {
  16.               String result = curIter.next();
  17.               if (result != null) return result;
  18.             }
  19.           }

  20.           return null;
  21.         }
  22.         
  23.         public boolean hasNext() {
  24.           return nextItem != null;
  25.         }

  26.         public String next() {
  27.           if (!hasNext())
  28.             throw new NullPointerException();

  29.           String oldItem = nextItem;
  30.           nextItem = advanceItem();
  31.           return oldItem;
  32.         }

  33.         public void remove() {
  34.           throw new UnsupportedOperationException();
  35.         }
  36.     };
  37.   }
复制代码

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

lixiang.xjtu 发表于 2014-9-29 13:40:12 | 显示全部楼层
这个题我昨天中午做了。某公司的online 题
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-3 02:12

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表