概述
spring中对集合的操作放在公共的类CollectionUtils方法中
1、对以下方法进行简单说明一下
public static <E> Iterator<E> toIterator(Enumeration<E> enumeration) {
return new EnumerationIterator<E>(enumeration);
}
这个方法里spring实现了一个针对Enumeration的Iterator适配EnumerationIterator.并取消了remove方法
private static class EnumerationIterator<E> implements Iterator<E> {
private Enumeration<E> enumeration;
public EnumerationIterator(Enumeration<E> enumeration) {
this.enumeration = enumeration;
}
public boolean hasNext() {
return this.enumeration.hasMoreElements();
}
public E next() {
return this.enumeration.nextElement();
}
public void remove() throws UnsupportedOperationException {
throw new UnsupportedOperationException("Not supported");
}
}
2、下面的方法是对Map<key, List<value>>进了一次封装。方便后面的使用,个人认为在开发过程中会有很多地方使用Map<key, List<value>>这种类型,直接使用spring提供的MultiValueMap可以更方便处理
public static <K, V> MultiValueMap<K, V> toMultiValueMap(Map<K, List<V>> map) {
return new MultiValueMapAdapter<K, V>(map);
}
public interface MultiValueMap<K, V> extends Map<K, List<V>> {
/**
* Return the first value for the given key.
* @param key the key
* @return the first value for the specified key, or {@code null}
*/
V getFirst(K key);
/**
* Add the given single value to the current list of values for the given key.
* @param key the key
* @param value the value to be added
*/
void add(K key, V value);
/**
* Set the given single value under the given key.
* @param key the key
* @param value the value to set
*/
void set(K key, V value);
/**
* Set the given values under.
* @param values the values.
*/
void setAll(Map<K, V> values);
/**
* Returns the first values contained in this {@code MultiValueMap}.
* @return a single value representation of this map
*/
Map<K, V> toSingleValueMap();
}
实现一个MultiValueMap适配
private static class MultiValueMapAdapter<K, V> implements MultiValueMap<K, V>, Serializable {
private final Map<K, List<V>> map;
public MultiValueMapAdapter(Map<K, List<V>> map) {
Assert.notNull(map, "'map' must not be null");
this.map = map;
}
public void add(K key, V value) {
List<V> values = this.map.get(key);
if (values == null) {
values = new LinkedList<V>();
this.map.put(key, values);
}
values.add(value);
}
public V getFirst(K key) {
List<V> values = this.map.get(key);
return (values != null ? values.get(0) : null);
}
public void set(K key, V value) {
List<V> values = new LinkedList<V>();
values.add(value);
this.map.put(key, values);
}
public void setAll(Map<K, V> values) {
for (Entry<K, V> entry : values.entrySet()) {
set(entry.getKey(), entry.getValue());
}
}
public Map<K, V> toSingleValueMap() {
LinkedHashMap<K, V> singleValueMap = new LinkedHashMap<K,V>(this.map.size());
for (Entry<K, List<V>> entry : map.entrySet()) {
singleValueMap.put(entry.getKey(), entry.getValue().get(0));
}
return singleValueMap;
}
...
}
3、之前返回的MutiValueMap实例中,程序中可以对Map可value值进行修改。而这个方法返回只读的MutiValueMap
public static <K,V> MultiValueMap<K,V> unmodifiableMultiValueMap(MultiValueMap<? extends K, ? extends V> map) {
Assert.notNull(map, "'map' must not be null");
Map<K, List<V>> result = new LinkedHashMap<K, List<V>>(map.size());
for (Map.Entry<? extends K, ? extends List<? extends V>> entry : map.entrySet()) {
List<V> values = Collections.unmodifiableList(entry.getValue());
result.put(entry.getKey(), values);
}
Map<K, List<V>> unmodifiableMap = Collections.unmodifiableMap(result);
return toMultiValueMap(unmodifiableMap);
}
参考jdk的Collections.unmodifiableList和Collections.unmodifiableMap
最后
以上就是能干手机为你收集整理的spring学习(二)公共类之CollectionUtils的全部内容,希望文章能够帮你解决spring学习(二)公共类之CollectionUtils所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复