Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 /*
  * Copyright (C) 2011 The Guava Authors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.google.common.collect;
Workaround for EnumMap bug. If you want to pass an EnumMap, with the intention of using its entrySet() method, you should wrap the EnumMap in this class instead.

This class is not thread-safe even if the underlying map is.

Author(s):
Dimitris Andreou
final class WellBehavedMap<K, V> extends ForwardingMap<K, V> {
  private final Map<K, V> delegate;
  private Set<Entry<K, V>> entrySet;
  private WellBehavedMap(Map<K, V> delegate) {
    this. = delegate;
  }

  
Wraps the given map into a WellBehavedEntriesMap, which intercepts its entrySet() method by taking the Set<K> keySet() and transforming it to Set<Entry<K, V>>. All other invocations are delegated as-is.
  static <K, V> WellBehavedMap<K, V> wrap(Map<K, V> delegate) {
    return new WellBehavedMap<K, V>(delegate);
  }
  @Override protected Map<K, V> delegate() {
    return ;
  }
  @Override public Set<Entry<K, V>> entrySet() {
    Set<Entry<K, V>> es = ;
    if (es != null) {
      return es;
    }
    return  = new EntrySet();
  }
  private final class EntrySet extends Maps.EntrySet<K, V> {
    @Override
    Map<K, V> map() {
      return WellBehavedMap.this;
    }
    @Override
    public Iterator<Entry<K, V>> iterator() {
      return new TransformedIterator<K, Entry<K, V>>(keySet().iterator()) {
        @Override
        Entry<K, V> transform(final K key) {
          return new AbstractMapEntry<K, V>() {
            @Override
            public K getKey() {
              return key;
            }
            @Override
            public V getValue() {
              return get(key);
            }
            @Override
            public V setValue(V value) {
              return put(keyvalue);
            }
          };
        }
      };
    }
  }
New to GrepCode? Check out our FAQ X