1. 程式人生 > >Apache的commons之函式式迭代器(Map,過濾,迴圈)(四)

Apache的commons之函式式迭代器(Map,過濾,迴圈)(四)

遍歷map 的幾種方式

        IterableMap<String, String> map = new HashedMap<>();
        map.put("zs", "123");
        map.put("ls", "456");
        map.put("www", "789");

        //遍歷的幾種方式
        map.entrySet().stream().forEach(e -> System.out.println("key-->" + e.getKey() + "val-->" + e.getValue()));


        //第二種
        map.keySet().stream().forEach(e -> System.out.println("key->" + e + "val" + map.get(e)));

        //第三種
        MapIterator<String, String> mapIterator = map.mapIterator();
        while (mapIterator.hasNext()) {
            mapIterator.next();
            String key = mapIterator.getKey();
            String val = mapIterator.getValue();
            System.out.println(key + "  " + val);
        }

 

去重迭代器

 

 List<String> list = new ArrayList<>();
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println("去重前");
        list.stream().forEach(System.out::println);
        UniqueFilterIterator iterator = new UniqueFilterIterator(list.iterator());
        System.out.println("去重後");
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

 

自定義過濾器

 

        List<String> list = new ArrayList<>();
        list.add("moom");
        list.add("bjsxt");
        list.add("dad");
        list.add("www");

        Predicate<String> predicate = new Predicate<String>() {
            @Override
            public boolean evaluate(String object) {
                return new StringBuffer(object).reverse().toString().equals(object);
            }
        };

        Iterator<String> filterIterator = new FilterIterator(list.iterator(), predicate);
        // list.stream().forEach(System.out::println);


        while (filterIterator.hasNext()) {
            System.out.println(filterIterator.next());
        }

 

迴圈迭代器

 

 List<String> list = new ArrayList<>();
        list.add("天貓");
        list.add("淘寶");
        list.add("聚划算");

        LoopingListIterator<String> iterator = new LoopingListIterator<String>(list);
        //定義迴圈5次
        for (int i = 0; i < 5; i++) {
            System.out.println(iterator.next());
        }

 

 

無序的雙向map-->DualHashBidiMap

 

  DualHashBidiMap<String, String> map = new DualHashBidiMap<>();
        map.put("zs", "[email protected]");
        map.put("www", "www.baidu.com");

        //通過val 找到key  需要反轉
        String email = map.inverseBidiMap().get("www.baidu.com");
        System.out.println(email);
        //遍歷map
        map.inverseBidiMap().entrySet().stream().forEach(System.out::println);

 

 

有序的treeMap

 

DualTreeBidiMap<String, String> bidiMap = new DualTreeBidiMap<>();
        //排序是根據   你要輸出的結果是根據key 還是根據val 來排序的 例如 根據val排序   hello word  bisxt  h<b
        bidiMap.put("ai", "hello word");
        bidiMap.put("bi", "bjsxt");

        //遍歷輸出
        bidiMap.inverseBidiMap().entrySet().forEach(System.out::println);

 

無序 可重複 HashBag

 

 HashBag<String> bag = new HashBag<>();
        bag.add("a");
        //再新增三次a
        bag.add("a",3);
        bag.add("d");
        bag.add("c");
        //刪除倆個a資料
        bag.remove("a",2);

        //迴圈輸出
        bag.stream().forEach(System.out::println);

 

 

有序 可重複的TreeBag

 

Bag<String> bag = new TreeBag<>();
        bag.add("a");
        //再新增三次a
        //bag.add("a",3);
        bag.add("d");
        bag.add("c");
        //刪除倆個a資料
       // bag.remove("a",2);

        //迴圈輸出
        bag.stream().forEach(System.out::println);

 

 

使用treeMap統計單詞出現的次數

 

  String str="a you ok a ok see you hello word";
        String[] s=str.split(" ");

        Bag<String> bag=new TreeBag<>();

        List<String> list = Arrays.asList(s);
        list.stream().forEach(e->bag.add(e));
        System.out.println("統計次數");
        Set<String> stringSet = bag.uniqueSet();
        stringSet.stream().forEach(e-> System.out.println(e+"出現次數為:"+bag.getCount(e)));

 

注意 : 迴圈我都使用的是JDK1.8的lambda表示式