@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