Java基础之 128 集合框架Iterator接口 129jdk8的foreach与Consumer接口 130Function接口 Supplier接口 Predicate接口

集合框架Iterator接口
1、集合输出
前面我们已经学习了集合的基本操作,很多情况下,我们需要把集合的内容进行输出,也就是遍历集合。
遍历集合的方式有以下几种:
1、 Iterator
2、 ListIterator
3、 Enumeration
4、 foreach

其中Iterator的使用率最高,在JDK1.5后新增的foreach也被大量使用。

2、Iterator
public interface Iterator
对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。
在这里插入图片描述


3、ListIterator
public interface ListIterator
extends Iterator
系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。
在这里插入图片描述


4、Enumeration
public interface Enumeration
实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回一系列的连续元素。
注:此接口的功能与 Iterator 接口的功能是重复的。此外,Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口而不是 Enumeration 接口。
在这里插入图片描述


5、foreach
在前面的知识讲解中,我们使用foreach来输出数组的内容,那么也可以输出集合中的内容。在使用foreach输出的时候一定要注意的是,创建集合时要指定操作泛型的类型。

List numbers = new ArrayList<>();
JDK1.8新特性:
//no.1
numbers.forEach((Integer integer) -> {System.out.println(integer);});
//no.2
numbers.forEach(integer -> {System.out.println(integer);});
//no.3
numbers.forEach(integer -> System.out.println(integer));
//no.4
numbers.forEach(System.out::println);
//no.5
numbers.forEach(new MyConsumer());


Consumer接口 消费者接口
Function<T,R> 接口 表示接受一个参数并产生结果的函数。
Supplier接口 代表结果供应商。
Predicate接口 断言接口


package com.vince;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;

/**
 * 集合的输出(迭代)
 * @author vince
 * @description
 */
public class IteratorDemo {

	
	//断言接口Predicate<T>
	private static void predicateTest(){
		List<String> list = Arrays.asList("Larry", "Moe", "Curly","Tom","QF_vince"); 
		List<String> result = filter(list,(s)->s.contains("o"));
		result.forEach(System.out::println);
	}
	
	private static List<String> filter(List<String> list,Predicate<String> p){
		List<String> results = new ArrayList<>();
		
		for (String s : list) {
			if(p.test(s)){ //测试是否符合要求
				results.add(s);
			}
		}
		
		return results;
	}
	
	//Supplier 代表结果供应商
	private static void supplierTest(){
		List<Integer> list = getNums(10,()->(int)(Math.random() * 100));
		list.forEach(System.out::println);
	}
	
	private static List<Integer> getNums(int num,Supplier<Integer> sup){
		 List<Integer> list = new ArrayList<>();
		 for(int i=0;i<num;i++){
			 list.add(sup.get());
		 }
		 return list;
	}
	
	//表示接受一个参数并产生结果的函数
	private static void functionTest(){
		String s = strToUpp("qf_vince",(str)->str.toUpperCase());
		System.out.println(s);
	}
	
	public static String strToUpp(String str,Function<String,String> f){
		return f.apply(str);
	}
	
	
	/**
	 * JDK1.8新的迭代方法
	 */
	private static void foreach(){
		List<String> list = new ArrayList<>();
		list.add("tom");
		list.add("jack");
		list.add("job");
		list.add("lily");
		
		//Consumer
		list.forEach(s->System.out.println(s));
		//list.forEach(System.out::println);
	}
	
	private static void enumeration(){
		Vector<String> vs = new Vector<>();
		vs.add("tom");
		vs.add("jack");
		vs.add("job");
		vs.add("lily");
		
		Enumeration<String> es = vs.elements();
		while(es.hasMoreElements()){
			System.out.println(es.nextElement());
		}
	}
	
	//foreach(1.5后)
	private static void foreach(Collection<Cat> c){
		for(Cat cat: c){
			System.out.println(cat);
		}
	}
	
	//iterator(1.5之前统一的迭代集合方式)
	private static void iterator(Collection<Cat> c){
			Iterator<Cat> iter = c.iterator();
			while(iter.hasNext()){
				System.out.println(iter.next());
			}
	}

	public static void main(String[] args) {
		List<Cat> list = new ArrayList<>();
		Cat c1 = new Cat("miaomiao",5,1);
		Cat c2 = new Cat("huahua",2,2);
		Cat c3 = new Cat("tom",5,3);
		Cat c4 = new Cat("miaomiao",3,1);
		list.add(c1);
		list.add(c2);
		list.add(c3);
		list.add(c4);
//		iterator(list);
//		foreach(list);
		
//		enumeration();
//		foreach();
//		functionTest();
//		supplierTest();
		predicateTest();
		
	}

}

Cat实体类从前面博客看 这里不再粘贴

Function接口

在这里插入图片描述

Supplier 代表结果供应商

获取10次随机数的结果
在这里插入图片描述

断言接口Predicate
表示用来做测试用的

Arrays类中的asList方法
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值