Collection和Iterator接口

下面主要是用代碼來介紹各種方法的使用

使用Lambda表達式遍歷集合

Java8爲Iterable接口新增了一個forEach默認方法,該方法所需參數的類型是一個函數式接口。

public class CollectionEach
{
    public static void main(String[] args)
    {
        // 創建一個集合
        Collection books = new HashSet();
        books.add("輕量級Java EE企業應用實戰");
        books.add("瘋狂Java講義");
        books.add("瘋狂Android講義");
        // 調用forEach()方法遍歷集合
        books.forEach(obj -> System.out.println("迭代集合元素:" + obj));
    }
}

使用Java8增強的Iterator遍歷集合元素

public class IteratorTest
{
    public static void main(String[] args)
    {
        // 創建集合、添加元素的代碼與前一個程序相同
        Collection books = new HashSet();
        books.add("輕量級Java EE企業應用實戰");
        books.add("瘋狂Java講義");
        books.add("瘋狂Android講義");
        // 獲取books集合對應的迭代器
        Iterator it = books.iterator();
        while(it.hasNext())
        {
            // it.next()方法返回的數據類型是Object類型,因此需要強制類型轉換
            String book = (String)it.next();
            System.out.println(book);
            if (book.equals("瘋狂Java講義"))
            {
                // 從集合中刪除上一次next方法返回的元素
                it.remove();
            }
            // 對book變量賦值,不會改變集合元素本身
            book = "測試字符串";   //①
        }
        System.out.println(books);
    }
}

使用Java8新增的Predicate操作集合

   Java8爲Collection集合新增了一個removeIf(Predicate filter)方法,該方法將會批量刪除符合filter條件的所有元素。該方法需要一個Predicate對象作爲參數,Predicate也是函數式接口,因此可使用Lambda表達式作爲參數。

public class PredicateTest2
{
    public static void main(String[] args)
    {
        // 創建books集合、爲books集合添加元素的代碼與前一個程序相同。
        Collection books = new HashSet();
        books.add(new String("輕量級Java EE企業應用實戰"));
        books.add(new String("瘋狂Java講義"));
        books.add(new String("瘋狂iOS講義"));
        books.add(new String("瘋狂Ajax講義"));
        books.add(new String("瘋狂Android講義"));
        // 統計書名包含“瘋狂”子串的圖書數量
        System.out.println(calAll(books , ele->((String)ele).contains("瘋狂")));
        // 統計書名包含“Java”子串的圖書數量
        System.out.println(calAll(books , ele->((String)ele).contains("Java")));
        // 統計書名字符串長度大於10的圖書數量
        System.out.println(calAll(books , ele->((String)ele).length() > 10));
    }
    public static int calAll(Collection books , Predicate p)
    {
        int total = 0;
        for (Object obj : books)
        {
            // 使用Predicate的test()方法判斷該對象是否滿足Predicate指定的條件
            if (p.test(obj))
            {
                total ++;
            }
        }
        return total;
    }
}

使用Java8新增的Stream操作集合

   java8新增了Stream、IntStream、LongStream、DoubleStream等流式API,這些API代表多個支持串行和並行聚集操作的元素。
   獨立使用Stream的步驟如下:
1.使用Stram或XxxStream的builder()類方法創建該Stream對應的Builder。
2.重複調用Builder的add()方法向該流中添加多個元素。
3.調用Builder的build()方法獲取對應的Stream。
4.調用Stream的聚集方法。
   Stream提供了大量的方法進行聚集操作,這些方法既可以是“中間的”,也可以是“末端的”。
中間方法:中間操作允許流保持打開狀態,並允許直接調用後續方法。中間方法的返回值是另外一個流。
末端方法:末端方法是對流的最終操作。當對某個Stream執行末端方法後,該流將會被“消耗”且不再可用。

public class CollectionStream
{
    public static void main(String[] args)
    {
        // 創建books集合、爲books集合添加元素的代碼與8.2.5小節的程序相同。
        Collection books = new HashSet();
        books.add(new String("輕量級Java EE企業應用實戰"));
        books.add(new String("瘋狂Java講義"));
        books.add(new String("瘋狂iOS講義"));
        books.add(new String("瘋狂Ajax講義"));
        books.add(new String("瘋狂Android講義"));
        // 統計書名包含“瘋狂”子串的圖書數量
        System.out.println(books.stream()
            .filter(ele->((String)ele).contains("瘋狂"))
            .count()); // 輸出4
        // 統計書名包含“Java”子串的圖書數量
        System.out.println(books.stream()
            .filter(ele->((String)ele).contains("Java") )
            .count()); // 輸出2
        // 統計書名字符串長度大於10的圖書數量
        System.out.println(books.stream()
            .filter(ele->((String)ele).length() > 10)
            .count()); // 輸出2
        // 先調用Collection對象的stream()方法將集合轉換爲Stream,
        // 再調用Stream的mapToInt()方法獲取原有的Stream對應的IntStream
        books.stream().mapToInt(ele -> ((String)ele).length())
            // 調用forEach()方法遍歷IntStream中每個元素
            .forEach(System.out::println);// 輸出8  11  16  7  8
    }
}
發佈了51 篇原創文章 · 獲贊 23 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章