您的位置:首页 > 编程语言 > Java开发

java1.8一个不错的api调用栈(1)从Stream<?>创建一个Map

2017-03-17 16:07 531 查看

java1.8一个不错的api调用栈(1)从
Stream<?>
创建一个Map

java

public static void main(String[] args) {
LinkedHashMap<String,String> map= null;
List<String> list = Arrays.asList("gao", "tian", "yue", "yue");
map = list.stream().collect(Collectors.toMap(a->null, Function.identity(), (a,b)->{return a+b;}, LinkedHashMap::new));
map.put(null, null);
System.out.println(map);
}


java

public static <T, K, U, M extends Map<K, U>>
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,
Function<? super T, ? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier) {
BiConsumer<M, T> accumulator
= (map, element) -> map.merge(keyMapper.apply(element),
valueMapper.apply(element), mergeFunction);
return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);


map.merge()

default V merge(K key, V value,
BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
Objects.requireNonNull(remappingFunction);
Objects.requireNonNull(value);
V oldValue = get(key);
V newValue = (oldValue == null) ? value :
remappingFunction.apply(oldValue, value);
if(newValue == null) {
remove(key);
} else {
put(key, newValue);
}
return newValue;
}


@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T> {

public static <T> BinaryOperator<T> minBy(Comparator<? super T> comparator) {
Objects.requireNonNull(comparator);
return (a, b) -> comparator.compare(a, b) <= 0 ? a : b;
}

public static <T> BinaryOperator<T> maxBy(Comparator<? super T> comparator) {
Objects.requireNonNull(comparator);
return (a, b) -> comparator.compare(a, b) >= 0 ? a : b;
}
}


@FunctionalInterface
public interface Comparator<T> {

int compare(T o1, T o2);

default Comparator<T> reversed() {
return Collections.reverseOrder(this);
}

public static <T extends Comparable<? super T>> Comparator<T> reverseOrder() {
return Collections.reverseOrder();
}

}


我们注意到:

使用Collectors.toMap这样的方式构建Map,key可以存null,value永远没有机会存入null。这以为着如果指定创建的Map类型是ConcurrentHashMap的时候,如果不过滤掉value的元素会报错。另外注意除了HashMap,TreeMap和ConcurrentHashMap的key也不可以为null
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java api