<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>