zoukankan      html  css  js  c++  java
  • guava iterable example

    public class IteratorTest {
        public static void main(String[] args) {
            test();
        }
    
        public static void test() {
            final Function<String, Iterable<String>> function = new Function<String, Iterable<String>>() {
    
                @Override
                public Iterable<String> apply(final String input) {
                    return new Iterable<String>() {
                        @Override
                        public Iterator<String> iterator() {
                            return new AbstractIterator<String>() {
                                int start = 0;
                                int end = input.length();
    
                                @Override
                                protected String computeNext() {
                                    if (start > end - 1) {
                                        return endOfData();
                                    }
                                    return String.valueOf(input.charAt(start++));
                                }
                            };
                        }
                    };
                }
            };
            List<String> names = Lists.newArrayList("123", "456", "789", "abc");
            Function<List<String>, Iterable<Iterable<String>>> fun = new Function<List<String>, Iterable<Iterable<String>>>() {
                @Override
                public Iterable<Iterable<String>> apply(final List<String> input) {
                    return new Iterable<Iterable<String>>() {
                        @Override
                        public Iterator<Iterable<String>> iterator() {
                            return new AbstractIterator<Iterable<String>>() {
                                int size = 0;
    
                                @Override
                                protected Iterable<String> computeNext() {
                                    if (size > input.size() - 1) {
                                        return endOfData();
                                    }
                                    Iterable<String> apply = function.apply(input.get(size++));
                                    Preconditions.checkNotNull(apply);
                                    return apply;
                                }
                            };
                        }
                    };
                }
            };
            Function<Iterable<Iterable<String>>, Iterable<String>> convert = new Function<Iterable<Iterable<String>>, Iterable<String>>() {
                @Override
                public Iterable<String> apply(final Iterable<Iterable<String>> iterators) {
                    return new Iterable<String>() {
                        @Override
                        public Iterator<String> iterator() {
                            return new AbstractIterator<String>() {
                                Iterator<Iterable<String>> outerIterator = iterators.iterator();
                                Iterator<String> innerIterator = null;
    
                                @Override
                                protected String computeNext() {
                                    if (innerIterator == null) {
                                        if (!outerIterator.hasNext()) {
                                            return endOfData();
                                        }
                                        innerIterator = outerIterator.next().iterator();
                                    }
                                    while (innerIterator.hasNext()) {
                                        return innerIterator.next();
                                    }
                                    innerIterator = null;
                                    return computeNext();
                                }
                            };
                        }
                    };
                }
            };
            //每次外部的iterator便利一次就回不去了,所以为了每次获取到都是从0开始的,需要包一层
            Function<Iterator<String>, Iterable<String>> con = new Function<Iterator<String>, Iterable<String>>() {
                @Override
                public Iterable<String> apply(final Iterator<String> input) {
                    return new Iterable<String>() {
                        @Override
                        public Iterator<String> iterator() {
                            return new AbstractIterator<String>() {
                                Iterator<String> inner = input;
    
                                @Override
                                protected String computeNext() {
                                    while (inner.hasNext()) {
                                        return inner.next();
                                    }
                                    return endOfData();
                                }
                            };
                        }
                    };
                }
            };
            Iterable<Iterable<String>> res = fun.apply(names);
            Iterable<String> iterators = convert.apply(res);
            for(String name:iterators){
                System.out.println(name);
            }
            System.out.println(Iterables.size(iterators));
            //直接转换
            Iterables.concat(res);
    
        }
    
        public void test2() {
            Function<String, Iterable<String>> function = new Function<String, Iterable<String>>() {
    
                @Override
                public Iterable<String> apply(final String input) {
                    return new Iterable<String>() {
                        @Override
                        public Iterator<String> iterator() {
                            return new AbstractIterator<String>() {
                                int start = 0;
                                int end = input.length();
    
                                @Override
                                protected String computeNext() {
                                    if (start > end - 1) {
                                        return endOfData();
                                    }
                                    return String.valueOf(input.charAt(start++));
                                }
                            };
                        }
                    };
                }
            };
            Iterable<String> aa = function.apply("12345");
            Preconditions.checkNotNull(aa);
            for (String a : aa) {
                System.out.println(a);
            }
            Iterable<String> bb = Iterables.filter(aa, new Predicate<String>() {
                @Override
                public boolean apply(String input) {
                    return !StringUtils.equals(input, "5");
                }
            });
            Iterable<String> cc = Iterables.concat(aa, bb);
            Preconditions.checkNotNull(cc);
        }
    
    }
    

      

  • 相关阅读:
    http 请求头设置缓存
    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单
    django如何用邮箱代替用户名登录
    python函数式编程学习之map,reduce,filter,sorted
    python traceback学习(转)
    python logging模块学习(转)
    python pip安装lxml失败(转)
    python下性能提示
    python移植性提示
    python测试与调试提示
  • 原文地址:https://www.cnblogs.com/wscit/p/6430516.html
Copyright © 2011-2022 走看看