Apache的commons之函式式迭代器(Map,過濾,迴圈)(四)
阿新 • • 發佈:2018-12-02
遍歷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表示式