xxx方法范例
方法说明
方法定义
方法使用举例
Map接口
默认方法computeIfAbsent
方法说明
如果key对应的Value存在则直接返回,否则返回我们新传入的值。
方法定义
default V computeIfAbsent(K key,
Function<? super K, ? extends V> mappingFunction) {
Objects.requireNonNull(mappingFunction);
V v;
if ((v = get(key)) == null) {
V newValue;
if ((newValue = mappingFunction.apply(key)) != null) {
put(key, newValue);
return newValue;
}
}
return v;
}
方法使用举例
Map<String, List<Integer>> map = new HashMap<>();
map.put("old",new ArrayList<>());
//返回旧
List<Integer> oldList = map.computeIfAbsent("old", k -> new ArrayList<>());
//返回新
List<Integer> newList = map.computeIfAbsent("new", k -> new ArrayList<>());
Collection接口
方法说明
删除集合中满足条件的元素
方法定义
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
方法使用举例
Stack
E push(E item)
E pop()
E peek()
Queue
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();//如果此队列为空,则会引发异常。
E peek();
Deque
void addFirst(E e);
void addLast(E e);
E removeFirst();
E removeLast();
boolean offerFirst(E e);
boolean offerLast(E e);
E pollFirst();
E pollLast();
E getFirst();//deque为空会抛出异常。
E getLast();
E peekFirst();//deque为空会返回null
E peekLast();
Comparator
自然排序的比较器
@SuppressWarnings("unchecked")
public static <T extends Comparable<? super T>> Comparator<T> naturalOrder() {
return (Comparator<T>) Comparators.NaturalOrderComparator.INSTANCE;
}
反转比较器
public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
return Collections.reverseOrder();
}
先转再比较
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}
public static <T, U> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor,
Comparator<? super U> keyComparator)
{
Objects.requireNonNull(keyExtractor);
Objects.requireNonNull(keyComparator);
return (Comparator<T> & Serializable)
(c1, c2) -> keyComparator.compare(keyExtractor.apply(c1),
keyExtractor.apply(c2));
}