java集合(包括java8新增知识)

<span style="font-family:Times New Roman;font-size:18px;">import java.util.*;
import java.util.function.Consumer;
import java.util.function.IntConsumer;
import java.util.function.Predicate;
import java.util.function.ToIntFunction;

public class CollectionEach 
{
	@SuppressWarnings("unchecked")
	public static void main(String[] args)
	{
		// 创建集合、添加元素的代码与前一个程序相同
		Collection c=new ArrayList();
		//添加元素
		c.add("语文");
		c.add("数学");
		c.add("外语");
		c.add("地理");
		//输出集合c的大小
		System.out.println(c.size());
		c.remove("语文");
		System.out.println(c.size());
		//判断集合c中是否包含“数学”
		System.out.println(c.contains("数学"));
		//输出集合c中的元素
		System.out.println(c);
		Collection books=new HashSet();
		books.add("语文");
		books.add("数学");
		books.add("生物");
		books.add("化学");
		//判断集合books是否包含集合c
		System.out.println(books.containsAll(c));
		//减去集合books中的元素
		c.removeAll(books);
		System.out.println(c);
		//添加集合books中的元素
		System.out.println("books集合中的元素:"+books);
		System.out.println(c);
		c.clear();
		c.add("数学");
		c.add("生物");
		c.add("化学");
		System.out.println("集合c中的元素:"+c);
		books.add("计算机");
		System.out.println("books集合中的元素:"+books);
		//控制集合books集合里只剩下c集合里也包含的元素,就是求两个集合的交集
		books.retainAll(c);
		System.out.println("集合c中的元素:"+books);
		//使用Lambda表达式遍历集合
		/*books.forEach(new Consumer() {
			   public void accept(Object element) {
			      System.out.println(element);
			   }
			});
		*/
		//使用java8增强的lterator遍历集合元素
		Collection names=new ArrayList();
		names.add("Mary");
		names.add("John");
		names.add("Tom");
		Iterator it=names.iterator();
		while(it.hasNext())
		{
			//it.hasNext()返回的数据类型是Object,因此需要强制类型转换
			String name=(String)it.next();
			System.out.print(name+" ");
			if(name.equals("Mary"))
			{
				//从集合中删除上次next()返回的元素
				it.remove();
				//names.remove(name);使用Iterator迭代过程中,不可修改集合元素,否则会引起异常
			}
			//对name变量重新赋值,不会改变集合元素本身
			name="测试字符串";
		}
		System.out.println("\n"+"集合names中的元素:"+names);
		//void forEachRemaining(Consumer action)使用Lambda来遍历集合元素
		Iterator b=books.iterator();
		b.forEachRemaining(new Consumer(){
			 public void accept(Object element) {
			      System.out.print(element+" ");
			   }
		});
		System.out.println();
		for(Object obj:books){
			String book=(String)obj;
			System.out.print(book+" ");
			if(book.equals("数学")){
				it.remove();
			}
		}
		System.out.println("\n"+books);	
		books.add("思想政治");
		books.add("多媒体");
		books.add("艺术设计");
		books.add("机器学习算法");
		books.add("云计算");
		books.add("云计算和大数据");
		System.out.println("books集合经过添加元素后:\n"+books);	
		/*
		 * Java8为Collection新增的removeIf(Predicate <? super E>filter)方法,
		 * 该方法批量删除符合filter条件的所有元素。
		 */
		books.removeIf(new Predicate(){
			public boolean test(Object arg0) {
				//统计books集合中字符串长度大于3的数量
				if(((String) arg0).length()>2)
				{
					return false;
				}
				return true;
			}
			
		});
		System.out.println("利用removeIf处理后,books变为:\n"+books);
		System.out.println("经过calAll处理后满足条件的元素:");
		System.out.println(calAll(books,new Predicate(){
			public boolean test(Object arg0) {
				if(((String)arg0).contains("云计算"))
				{
					return true;
				}
				return false;
			}
			
		}));
		System.out.println("调用stream末端方法:");
		System.out.println(books.stream().filter(new Predicate(){
			public boolean test(Object arg0) {
				if((boolean)((String) arg0).contains("云计算"))
				{
					return true;
				}
				return false;
			}
			
		}).count());
		//先调用Collection对象的stream()方法将集合转换为对应的stream
		//在调用stream的mapInt()方法获取原有的Stream对应的Intstream
		books.stream().mapToInt(new ToIntFunction(){
			public int applyAsInt(Object arg0) {
				return ((String)arg0).length();
			}
			}).forEach(new IntConsumer(){
				//调用forEach()方法输出IntStream中每个元素
				public void accept(int arg0) {
					System.out.print(arg0+" ");
				}
				
			});
	}
	
	public static int calAll(Collection books,Predicate p)
	{
		int total=0;
		for (Object obj:books)
		{
			//统计满足Predicate指定条件的对象
			if(p.test(obj))
			{
				System.out.println(obj);
				total++;
			}
		}
		return total;
	}
	
}</span>



<span style="font-family:Times New Roman;font-size:18px;">import java.util.function.Consumer;
import java.util.function.IntConsumer;
import java.util.function.IntPredicate;
import java.util.function.IntUnaryOperator;
import java.util.stream.*;
import java.util.stream.IntStream.Builder;


public class InstreamTest {

	public static void main(String[] args) {
		IntStream is= IntStream.builder()
				.add(20)
				.add(19)
				.add(-3)
				.add(18).build();
	//PS:下面调用聚集方法的代码每次只能执行一次
		 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().getAsDouble());
		 System.out.println("is所有元素的平方是否都大于20:"+
				 is.allMatch(new IntPredicate(){
					public boolean test(int arg0) {
						if(arg0*arg0>20)
						return true;
						return false;
					}
				 }));
		 System.out.println("is所有元素的平方是否都大于20:"+
				 is.anyMatch(new IntPredicate(){
					public boolean test(int arg0) {
						if(arg0*arg0>20)
						return true;
						return false;
					}
				 }));
		 //将is映射成一个新的stream,新的stream的每个元素是原来的stream元素的2倍+1
		 IntStream newIs=is.map(new IntUnaryOperator (){
			public int applyAsInt(int arg0) {
				return (arg0*2+1);
				}
			 
		 });
		 //使用方法遍历集合元素
		 newIs.forEach(new IntConsumer(){
			public void accept(int arg0) {
				System.out.println(arg0);
			}
		 });
		 
		 }
}
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值