欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中Collections工具类和Optional容器类使用

程序员文章站 2024-01-14 08:48:34
...

Collections类
Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法:

1、排序操作(主要针对List接口相关)
reverse(List list):反转指定List集合中元素的顺序
shuffle(List list):对List中的元素进行随机排序(洗牌)
sort(List list):对List里的元素根据自然升序排序
sort(List list,Comparator c):自定义比较器进行排序
swap(Listlist,int i,int j):将指定List集合中i处元素和j处元素进行交换
rotate(List list,int distance):将所有元素向右移位指定长度,如果distance等于size那么结果不变

2.查找和替换(主要针对Collection接口相关)
binarySearch(List list, Object key):使用二分搜索法,以获得指定对象在List中的索引,前提是集合已经排序
max(Collection coll);返回最大元素
max(Collection coll, Comparator comp): 根据自定义比较器,返回最大元素
min(Collection coll):;返回最小元素
min(Collection coll, Comparator comp):根据自定义比较器,返回最小元素
fill(Lit list, Object obj):使用指定对象填充
frequency(Collection Object o);返回指定集合中指定对象出现的次数
replaceAll(List list, Object old, Object new):替换

3.同步控制
Collections工具类中提供了多个synchronizedXxx方法,该方法返回指定集合对象对应的同步对象,从而解诀多线程;
并发访问集合时线程的安全问题。HashSet、 ArrayList、 HashMap都是线程不安全的,如果需要考虑同步,则
使用这些方法。这些方法主要有: synchronizedSet、 synchronizedSortedSet、 synchronizedList、
synchronizedMap、synchronizedSortedMap 。
特别需要指出的是,在使用迭代方法遍历集合时需要手工同步返回的集合。

4.设置不可变集合
Collections有三类方法可返回一个不可变集合:
emptyXxx():返回一个空的不可变的集合对象
singletonXx):返回一个只包含指定对象的,不可变的集合对象。
unmodifiablexx():返回指定集合对象的不可变视图

5.其它
disjont(Collection<?> c1, Collection<?> c2)-如果两个指定collection中没有相同的元素,则返回true。
addll(Collection<? super T>c,… a)- -种方便的方式,将所有指定元素添加到指定collection中。
Comparator<T]reverseOrder(Comparator cmp)-返回一个比较器,它强行反转指定比较器的顺序。如果指定比较
器为null,则此方法等同于reverseOrder() (换句话说,它返回一个比较器,该比较器将强行反转实现
Comparable接口那些对象collection.上的自然顺序)。
 

Optional容器类(JDK1.8)

这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
of:
为非null的值创建一个Optional。
ofNullable:
为指定的值创建一个Optional, 如果指定的值为null,则返回一个空的Optional。
isPresent:
如果值存在返回true,否则返回false.
get:
如果OptionaI有值则将其返回,否则抛出NoSuchElementException.
ifPresent:
如果optional实例有值则为其调用consumer,否则不做处理
orElse:
如果有值则将其返回,否则返回指定的其它值。
orElseGet:
orElseGet与orElse方法类似,区别在于得到的默认值|。orElse方法 将传入的字符串作为默认值,
orElseGet方法可以接受Supplier接口的实现用来生成默认值。
orElseThrow:
如果有值则将其返回,否则抛出supplier接口创建的异常。
map:
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
flatMap:
如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与 map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。
filter:
如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。

代码示例:

package com.booy;

import java.util.Optional;
public class OptionalDemo {
	public static void main(String[] args) {
		//创建Optional方式
		Optional<String> opt = Optional.of("boy");
//		Optional<String> opt2 = Optional.ofNullable("boy");
		Optional<String> opt3 = Optional.empty();
		
		//判断是否为空
		//System.out.println(opt.isPresent());
		//有值则将其返回,否则抛出NoSuchElementException
		//System.out.println(opt.get());
		
		//有值就可以打印出来
		//opt.ifPresent((value)->System.out.println(value));
		//如果有值则将其返回,否则返回指定的值。
		//System.out.println(opt.orElse("无值"));
		//System.out.println(opt.orElseGet(() -> "default"));
//		try {
//			opt3.orElseThrow(Exception::new);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		//映射为另一个Optional
		//Optional<String> opt4 = opt.map((value)->value.toUpperCase());		
		Optional<String> opt5 = opt.flatMap((value)->Optional.of(value.toUpperCase()));
		System.out.println(opt5.orElse("no find"));
		opt5 = opt.filter((value)->value.length()>3);
		System.out.println(opt5.orElse("no find"));
	}
}