Collection和Iterator接口

来源:互联网 发布:c语言左移右移 编辑:程序博客网 时间:2024/05/22 07:06

下面主要是用代码来介绍各种方法的使用

使用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    }}
原创粉丝点击