Java遍历集合的元素

@Test
public void test_Collection() {
    Collection c = new ArrayList();
    // 添加元素
    c.add("孙悟空");
    // 虽然集合里不能放基本类型的值,但Java支持自动装箱
    c.add(6);
    System.out.println("c集合的元素个数为:" + c.size()); // 输出2
    // 删除指定元素
    c.remove(6);
    System.out.println("c集合的元素个数为:" + c.size()); // 输出1
    // 判断是否包含指定字符串
    System.out.println("c集合的是否包含\"孙悟空\"字符串:" + c.contains("孙悟空")); // 输出true

    c.add("轻量级Java EE企业应用实战");
    System.out.println("c集合的元素:" + c);

    Collection books = new HashSet();
    books.add("轻量级Java EE企业应用实战");
    books.add("疯狂Java讲义");
    System.out.println("c集合是否完全包含books集合?" + c.containsAll(books)); // 输出false

    //c:[孙悟空, 轻量级Java EE企业应用实战]
    //books:[轻量级Java EE企业应用实战, 疯狂Java讲义]
    // 用c集合减去books集合里的元素
    c.removeAll(books);
    System.out.println("c集合的元素:" + c);
    // 删除c集合里所有元素
    c.clear();
    System.out.println("c集合的元素:" + c);

    // 控制books集合里只剩下c集合里也包含的元素
    books.retainAll(c);
    System.out.println("books集合的元素:" + books);
}

c集合的元素个数为:2
c集合的元素个数为:1
c集合的是否包含"孙悟空"字符串:true
c集合的元素:[孙悟空, 轻量级Java EE企业应用实战]
c集合是否完全包含books集合?false
c集合的元素:[孙悟空]
c集合的元素:[]
books集合的元素:[]


@Test
public void test_CollectionEach() {
    // 创建一个集合
    Collection<String> books = new HashSet<>();
    books.add("张三");
    books.add("李四");
    books.add("王五");
    // 调用forEach()方法遍历集合
    books.forEach(obj -> System.out.println("迭代集合元素:" + obj));
}

迭代集合元素:李四
迭代集合元素:张三
迭代集合元素:王五


@Test
public void test_Iterator() {
    // 创建集合、添加元素的代码与前一个程序相同
    Collection<String> books = new HashSet<>();
    books.add("唱");
    books.add("跳");
    books.add("rup");
    books.add("篮球");
    // 获取books集合对应的迭代器
    Iterator it = books.iterator();
    while (it.hasNext()) {
        // it.next()方法返回的数据类型是Object类型,因此需要强制类型转换
        String book = (String) it.next();
        System.out.println(book);
        if ("篮球".equals(book)) {
            // 从集合中删除上一次next方法返回的元素
            it.remove();
        }
        // 对book变量赋值,不会改变集合元素本身
        book = "测试字符串";   //①
    }
    System.out.println(books);
}



篮球
rup
[唱, 跳, rup]


@Test
public void test_IteratorError() {
    // 创建集合、添加元素的代码与前一个程序相同
    Collection<String> books = new HashSet<>();
    books.add("唱");
    books.add("跳");
    books.add("rup");
    books.add("篮球");
    // 获取books集合对应的迭代器
    Iterator it = books.iterator();
    while (it.hasNext()) {
        String book = (String) it.next();
        System.out.println(book);
        //删除rup没有异常,不要存在侥幸心理(最后一个元素)
        if ("篮球".equals(book)) {
            // 使用Iterator迭代过程中,不可修改集合元素,下面代码引发异常
            books.remove(book);
        }
    }
}



篮球

java.util.ConcurrentModificationException


@Test
public void test_IteratorEach() {
    // 创建集合、添加元素的代码与前一个程序相同
    Collection<String> books = new HashSet<>();
    books.add("唱");
    books.add("跳");
    books.add("rup");
    books.add("篮球");
    // 获取books集合对应的迭代器
    Iterator<String> it = books.iterator();
    // 使用Lambda表达式(目标类型是Comsumer)来遍历集合元素
    it.forEachRemaining(obj -> System.out.println("迭代集合元素:" + obj));
}

迭代集合元素:唱
迭代集合元素:跳
迭代集合元素:篮球
迭代集合元素:rup


@Test
public void test_Foreach() {
    // 创建集合、添加元素的代码与前一个程序相同
    Collection<String> books = new HashSet<>();
    books.add("唱");
    books.add("跳");
    books.add("rup");
    books.add("篮球");
    // 此处的book变量也不是集合元素本身
    for (String book : books) {
        System.out.println(book);
        //rup
        if ("篮球".equals(book)) {
            // 下面代码会引发ConcurrentModificationException异常
            books.remove(book);     //①
        }
    }
    System.out.println(books);
}



篮球

java.util.ConcurrentModificationException


@Test
public void test_Predicate() {
    // 创建一个集合
    Collection<String> books = new HashSet<>();
    books.add("唱");
    books.add("跳");
    books.add("rup");
    books.add("篮球");
    books.add("我是个颜值主播,我不能露脸。");
    // 使用Lambda表达式(目标类型是Predicate)过滤集合
    books.removeIf(ele -> ele.length() < 10);
    System.out.println(books);
}

[我是个颜值主播,我不能露脸。]


@Test
public void test_Predicate_2() {
    // 创建books集合
    Collection<String> books = new HashSet<>();
    books.add("唱");
    books.add("跳");
    books.add("rup");
    books.add("rup hub");
    books.add("篮球");
    books.add("NBA篮球形象大使");
    books.add("我是个颜值主播,我不能露脸。");
    // 统计书名包含“篮球”子串的图书数量
    System.out.println(calAll(books, ele -> ele.contains("篮球")));
    // 统计书名包含“rup”子串的图书数量
    System.out.println(calAll(books, ele -> ele.contains("rup")));
    // 统计书名字符串长度大于10的图书数量
    System.out.println(calAll(books, ele -> ele.length() > 10));
}
private static int calAll(Collection<String> books, Predicate<String> p) {
    int total = 0;
    for (String obj : books) {
        // 使用Predicate的test()方法判断该对象是否满足Predicate指定的条件
        if (p.test(obj)) {
            total++;
        }
    }
    return total;
}

2
2
1


@Test
public void test_IntStream() {
    IntStream is = IntStream.builder()
            .add(20)
            .add(13)
            .add(-2)
            .add(18)
            .build();
    // 下面调用聚集方法的代码每次只能执行一个
    System.out.println("is所有元素的最大值:" + is.max().getAsInt());
    System.out.println("is所有元素的最小值:" + is.min().getAsInt());
    System.out.println("is所有元素的总和:" + is.sum());
    System.out.println("is所有元素的总数:" + is.count());
    System.out.println("is所有元素的平均值:" + is.average());
    System.out.println("is所有元素的平方是否都大于20:" + is.allMatch(ele -> ele * ele > 20));
    System.out.println("is是否包含任何元素的平方大于20:" + is.anyMatch(ele -> ele * ele > 20));
    // 将is映射成一个新Stream,新Stream的每个元素是原Stream元素的2倍+1
    IntStream newIs = is.map(ele -> ele * 2 + 1);
    // 使用方法引用的方式来遍历集合元素
    newIs.forEach(System.out::println); // 输出41 27 -3 37
}

@Test
public void test_CollectionStream() {
    // 创建books集合、为books集合添加元素的代码与8.2.5小节的程序相同。
    Collection<String> books = new HashSet<>();
    books.add("轻量级Java EE企业应用实战");
    books.add("疯狂Java讲义");
    books.add("疯狂iOS讲义");
    books.add("疯狂Ajax讲义");
    books.add("疯狂Android讲义");
    // 统计书名包含“疯狂”子串的图书数量
    System.out.println(books.stream()
            .filter(ele -> ele.contains("疯狂"))
            .count()); // 输出4

    // 统计书名包含“Java”子串的图书数量
    System.out.println(books.stream()
            .filter(ele -> ele.contains("Java"))
            .count()); // 输出2

    // 统计书名字符串长度大于10的图书数量
    System.out.println(books.stream()
            .filter(ele -> ele.length() > 10)
            .count()); // 输出2

    // 先调用Collection对象的stream()方法将集合转换为Stream,
    // 再调用Stream的mapToInt()方法获取原有的Stream对应的IntStream
    books.stream().mapToInt(String::length)
            // 调用forEach()方法遍历IntStream中每个元素
            .forEach((book) -> System.out.print(book + " "));// 输出8  11  16  7  8
}

4
2
2
8 11 16 7 8 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值