MultimapBuilder.java 8.23 KB
package com.google.common.collect;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
import java.io.Serializable;
import java.util.Collection;
import java.util.Comparator;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeMap;
import nj;

@Beta
@GwtCompatible
public abstract class MultimapBuilder<K0, V0>
{
  public static <K0 extends Enum<K0>> MultimapBuilderWithKeys<K0> enumKeys(Class<K0> paramClass)
  {
    Preconditions.checkNotNull(paramClass);
    new MultimapBuilderWithKeys()
    {
      final <K extends K0, V> Map<K, Collection<V>> a()
      {
        return new EnumMap(this.a);
      }
    };
  }
  
  public static MultimapBuilderWithKeys<Object> hashKeys()
  {
    return hashKeys(8);
  }
  
  public static MultimapBuilderWithKeys<Object> hashKeys(int paramInt)
  {
    nj.a(paramInt, "expectedKeys");
    new MultimapBuilderWithKeys()
    {
      final <K, V> Map<K, Collection<V>> a()
      {
        return new HashMap(this.a);
      }
    };
  }
  
  public static MultimapBuilderWithKeys<Object> linkedHashKeys()
  {
    return linkedHashKeys(8);
  }
  
  public static MultimapBuilderWithKeys<Object> linkedHashKeys(int paramInt)
  {
    nj.a(paramInt, "expectedKeys");
    new MultimapBuilderWithKeys()
    {
      final <K, V> Map<K, Collection<V>> a()
      {
        return new LinkedHashMap(this.a);
      }
    };
  }
  
  public static MultimapBuilderWithKeys<Comparable> treeKeys()
  {
    return treeKeys(Ordering.natural());
  }
  
  public static <K0> MultimapBuilderWithKeys<K0> treeKeys(Comparator<K0> paramComparator)
  {
    Preconditions.checkNotNull(paramComparator);
    new MultimapBuilderWithKeys()
    {
      final <K extends K0, V> Map<K, Collection<V>> a()
      {
        return new TreeMap(this.a);
      }
    };
  }
  
  public abstract <K extends K0, V extends V0> Multimap<K, V> build();
  
  public <K extends K0, V extends V0> Multimap<K, V> build(Multimap<? extends K, ? extends V> paramMultimap)
  {
    Multimap localMultimap = build();
    localMultimap.putAll(paramMultimap);
    return localMultimap;
  }
  
  public static abstract class ListMultimapBuilder<K0, V0>
    extends MultimapBuilder<K0, V0>
  {
    ListMultimapBuilder()
    {
      super();
    }
    
    public abstract <K extends K0, V extends V0> ListMultimap<K, V> build();
    
    public <K extends K0, V extends V0> ListMultimap<K, V> build(Multimap<? extends K, ? extends V> paramMultimap)
    {
      return (ListMultimap)super.build(paramMultimap);
    }
  }
  
  public static abstract class MultimapBuilderWithKeys<K0>
  {
    abstract <K extends K0, V> Map<K, Collection<V>> a();
    
    public MultimapBuilder.ListMultimapBuilder<K0, Object> arrayListValues()
    {
      return arrayListValues(2);
    }
    
    public MultimapBuilder.ListMultimapBuilder<K0, Object> arrayListValues(final int paramInt)
    {
      nj.a(paramInt, "expectedValuesPerKey");
      new MultimapBuilder.ListMultimapBuilder()
      {
        public final <K extends K0, V> ListMultimap<K, V> build()
        {
          return Multimaps.newListMultimap(MultimapBuilder.MultimapBuilderWithKeys.this.a(), new MultimapBuilder.a(paramInt));
        }
      };
    }
    
    public <V0 extends Enum<V0>> MultimapBuilder.SetMultimapBuilder<K0, V0> enumSetValues(final Class<V0> paramClass)
    {
      Preconditions.checkNotNull(paramClass, "valueClass");
      new MultimapBuilder.SetMultimapBuilder()
      {
        public final <K extends K0, V extends V0> SetMultimap<K, V> build()
        {
          MultimapBuilder.b localb = new MultimapBuilder.b(paramClass);
          return Multimaps.newSetMultimap(MultimapBuilder.MultimapBuilderWithKeys.this.a(), localb);
        }
      };
    }
    
    public MultimapBuilder.SetMultimapBuilder<K0, Object> hashSetValues()
    {
      return hashSetValues(2);
    }
    
    public MultimapBuilder.SetMultimapBuilder<K0, Object> hashSetValues(final int paramInt)
    {
      nj.a(paramInt, "expectedValuesPerKey");
      new MultimapBuilder.SetMultimapBuilder()
      {
        public final <K extends K0, V> SetMultimap<K, V> build()
        {
          return Multimaps.newSetMultimap(MultimapBuilder.MultimapBuilderWithKeys.this.a(), new MultimapBuilder.c(paramInt));
        }
      };
    }
    
    public MultimapBuilder.SetMultimapBuilder<K0, Object> linkedHashSetValues()
    {
      return linkedHashSetValues(2);
    }
    
    public MultimapBuilder.SetMultimapBuilder<K0, Object> linkedHashSetValues(final int paramInt)
    {
      nj.a(paramInt, "expectedValuesPerKey");
      new MultimapBuilder.SetMultimapBuilder()
      {
        public final <K extends K0, V> SetMultimap<K, V> build()
        {
          return Multimaps.newSetMultimap(MultimapBuilder.MultimapBuilderWithKeys.this.a(), new MultimapBuilder.d(paramInt));
        }
      };
    }
    
    public MultimapBuilder.ListMultimapBuilder<K0, Object> linkedListValues()
    {
      new MultimapBuilder.ListMultimapBuilder()
      {
        public final <K extends K0, V> ListMultimap<K, V> build()
        {
          return Multimaps.newListMultimap(MultimapBuilder.MultimapBuilderWithKeys.this.a(), MultimapBuilder.e.a());
        }
      };
    }
    
    public MultimapBuilder.SortedSetMultimapBuilder<K0, Comparable> treeSetValues()
    {
      return treeSetValues(Ordering.natural());
    }
    
    public <V0> MultimapBuilder.SortedSetMultimapBuilder<K0, V0> treeSetValues(final Comparator<V0> paramComparator)
    {
      Preconditions.checkNotNull(paramComparator, "comparator");
      new MultimapBuilder.SortedSetMultimapBuilder()
      {
        public final <K extends K0, V extends V0> SortedSetMultimap<K, V> build()
        {
          return Multimaps.newSortedSetMultimap(MultimapBuilder.MultimapBuilderWithKeys.this.a(), new MultimapBuilder.f(paramComparator));
        }
      };
    }
  }
  
  public static abstract class SetMultimapBuilder<K0, V0>
    extends MultimapBuilder<K0, V0>
  {
    SetMultimapBuilder()
    {
      super();
    }
    
    public abstract <K extends K0, V extends V0> SetMultimap<K, V> build();
    
    public <K extends K0, V extends V0> SetMultimap<K, V> build(Multimap<? extends K, ? extends V> paramMultimap)
    {
      return (SetMultimap)super.build(paramMultimap);
    }
  }
  
  public static abstract class SortedSetMultimapBuilder<K0, V0>
    extends MultimapBuilder.SetMultimapBuilder<K0, V0>
  {
    public abstract <K extends K0, V extends V0> SortedSetMultimap<K, V> build();
    
    public <K extends K0, V extends V0> SortedSetMultimap<K, V> build(Multimap<? extends K, ? extends V> paramMultimap)
    {
      return (SortedSetMultimap)super.build(paramMultimap);
    }
  }
  
  static final class a<V>
    implements Supplier<List<V>>, Serializable
  {
    private final int a;
    
    a(int paramInt)
    {
      this.a = nj.a(paramInt, "expectedValuesPerKey");
    }
  }
  
  static final class b<V extends Enum<V>>
    implements Supplier<Set<V>>, Serializable
  {
    private final Class<V> a;
    
    b(Class<V> paramClass)
    {
      this.a = ((Class)Preconditions.checkNotNull(paramClass));
    }
  }
  
  static final class c<V>
    implements Supplier<Set<V>>, Serializable
  {
    private final int a;
    
    c(int paramInt)
    {
      this.a = nj.a(paramInt, "expectedValuesPerKey");
    }
  }
  
  static final class d<V>
    implements Supplier<Set<V>>, Serializable
  {
    private final int a;
    
    d(int paramInt)
    {
      this.a = nj.a(paramInt, "expectedValuesPerKey");
    }
  }
  
  static enum e
    implements Supplier<List<Object>>
  {
    private e() {}
    
    public static <V> Supplier<List<V>> a()
    {
      return a;
    }
  }
  
  static final class f<V>
    implements Supplier<SortedSet<V>>, Serializable
  {
    private final Comparator<? super V> a;
    
    f(Comparator<? super V> paramComparator)
    {
      this.a = ((Comparator)Preconditions.checkNotNull(paramComparator));
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/collect/MultimapBuilder.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */