java1.8一个不错的api调用栈(1)从Stream<?>创建一个Map
2017-03-17 16:07
531 查看
java1.8一个不错的api调用栈(1)从Stream<?>
创建一个Map
javapublic 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
相关文章推荐
- arcgis api for flex 开发入门(二)map 的创建<转>
- java:<创建一个MyInteger类>
- Java笔记4 JavaAPI<3>Map、Map-keySet、Map.entry
- arcgis api for flex 高级主题(一) esri tilemap 四叉树索引研究<转>
- 在JavaScript中实现类似Java中List<Map>类型的数组
- Java笔记4 JavaAPI<1>集合框
- [翻译] - <Entity Framework> - 快速入门: 用 EMD 工具在已有数据库的基础上创建一个模型
- 程序员_Java基础之<八>-Map集合、集合工具类
- 用C#创建一个封装Google Map API的GoogleMap Web服务器控件(一) (转)
- 用C#创建一个封装Google Map API的GoogleMap Web服务器控件(一)
- 使用 <map> 库创建关联容器
- Java笔记4 JavaAPI<2>TreeSet、Comparator、泛型
- Java笔记4 JavaAPI<4>集合(Arrays)、Collections
- 用C#创建一个封装Google Map API的GoogleMap Web服务器控件(二) (转)
- Java 处理Map<K,V>的方法
- 黑马程序员-Java语言基础– Map<K,V> 第16-17天
- 将一个LIST分组,转为map<string,list>类型
- 泛型系列<6>:创建一个可以被初始化为空的值类型
- Java利用反射来获取一个方法的 范型化参数 Vector<Integer>的类型
- map常用成员(关联容器)----创建map<主键,主键对应的值>,增insert,删erase,改查找find,然后修改second,遍历iterator,获取元素个数size,判空empty