zoukankan      html  css  js  c++  java
  • 迭代器适配器方法惯用法

    package t20211225;
    
    import java.util.*;
    
    /**
     * @Author: DengJia
     * @Date: 2021/12/26 10:04
     * @Description: 顺序迭代、逆序迭代、乱序迭代
     */
    
    public class IterableClass implements Iterable<String> {
        protected String[] words = ("1 2 3 4 5 6 7 8 9 0").split(" ");
    
        @Override
        public Iterator<String> iterator() {
            return new Iterator<String>() {
                private int index = 0;
    
                @Override
                public boolean hasNext() {
                    return index < words.length;
                }
    
                @Override
                public String next() {
                    return words[index++];
                }
    
                @Override
                public void remove() {
                    throw new UnsupportedOperationException();
                }
            };
        }
    
        public static void main(String[] args) {
            MultiIterableClass mic = new MultiIterableClass();
            System.out.print("顺序迭代:");
            for (String s : mic) {
                System.out.print(s + " ");
            }
            System.out.print("\n逆序迭代:");
            for (String s : mic.reversed()) {
                System.out.print(s + " ");
            }
            System.out.print("\n乱序迭代:");
            for (String s : mic.randomized()) {
                System.out.print(s + " ");
            }
        }
    }
    
    class MultiIterableClass extends IterableClass {
        public Iterable<String> reversed() {
            return () -> new Iterator<String>() {
                int current = words.length - 1;
    
                @Override
                public boolean hasNext() {
                    return current > -1;
                }
    
                @Override
                public String next() {
                    return words[current--];
                }
    
                @Override
                public void remove() {
                    throw new UnsupportedOperationException();
                }
            };
        }
    
        public Iterable<String> randomized() {
            return () -> {
                // 洗牌
                List<String> shuffled = new ArrayList<>(Arrays.asList(words));
                Collections.shuffle(shuffled, new Random(47));
                return shuffled.iterator();
            };
        }
    }
    
    
    顺序迭代:1 2 3 4 5 6 7 8 9 0 
    逆序迭代:0 9 8 7 6 5 4 3 2 1 
    乱序迭代:4 6 3 1 8 7 2 5 0 9 
    
    DJOSIMON
  • 相关阅读:
    市面上的系统.
    linux /dev 常见特殊设备介绍与应用[loop,null,zero,full,random]
    Linux command 系统快捷键
    Qtcreator中常用快捷键总结
    开始新的博客征途
    css选择器顺序的小技巧
    推荐20个很有帮助的web前端开发教程
    炙手可热的前端资源大集合
    一款纯css实现的垂直时间线效果
    15款极具创造性的艺术创意
  • 原文地址:https://www.cnblogs.com/DJOSIMON/p/15732758.html
Copyright © 2011-2022 走看看