LINUX.ORG.RU

[Sugar for coffie]Сахарок для java


0

2

Небольшой совет как писать меньше кода в убогом недоязычке java, при инициализации убогих массивов, хешмапов и прочей шелупони.


import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Этакая штука для создания карт, массивов и т.п. одной строкой
 * <p/>
 * @author wfrr
 */
public final class Sugar {
  
  /**
   * Создает объект типа {@link Pair }
   * @param <L>
   * @param <R>
   * @param l
   * @param r
   * @return 
   */
  public static <L, R> Pair<L, R> p(L l, R r) {
    return new Pair<L, R>(l, r);
  }
  
  /**
   * Создает карту из переданных пар
   * @param <K>
   * @param <V>
   * @param pairs
   * @return 
   */
  public static <K, V> Map<K, V> map(Pair<K, V> ... pairs) {
    HashMap<K, V> m = new HashMap<K, V>();
    if(pairs != null) {
      for(Pair<K, V> pair: pairs) {
        m.put(pair.getLeft(), pair.getRight());
      }
    }
    return m;
  }
  
  /**
   * Возвращает массив переданных элементов
   * @param <T>
   * @param ts
   * @return 
   */
  public static <T> T[] array(T ... ts) {
    return ts;
  }
  
  /**
   * Заполняет коллекцию
   * @param <T>
   * @param ts
   * @return 
   */
  public static<C extends Collection<T>, T> C fill(C c, T ... ts) {
    if(ts != null) {
      for(T t: ts) {
        c.add(t);
      }
    }
    return c;
  }
  
  /**
   * Возвращает мутабельный список содержащий переданные элементы
   * @param <T>
   * @param ts
   * @return 
   */
  public static <T> List<T> list(T ... ts) {
    if(ts == null) {
      return new ArrayList<T>();
    }
    return fill(new ArrayList<T>(ts.length), ts);
  }
  
  /**
   * Возвращает мутабельный набор содеражащий переданные элементы
   * @param <T>
   * @param ts
   * @return 
   */
  public static <T> Set<T> set(T ... ts) {
    if(ts == null) {
      return new HashSet<T>();
    }
    return fill(new HashSet<T>(ts.length), ts);
  }
}

/**
 * Пара, для различный контейнеров и прочего. 
 * @author wfrr
 */
public class Pair<T1, T2> {
  T1 left;
  T2 right;

  public Pair() {
  }

  public Pair(T1 left, T2 right) {
    this.left = left;
    this.right = right;
  }

  public T1 getLeft() {
    return left;
  }

  public void setLeft(T1 left) {
    this.left = left;
  }

  public T2 getRight() {
    return right;
  }

  public void setRight(T2 right) {
    this.right = right;
  }

  @Override
  @SuppressWarnings("unchecked")
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Pair<T1, T2> other =
      (Pair<T1, T2>) obj;
    if (this.left != other.left &&
      (this.left == null || !this.left.equals(other.left))) {
      return false;
    }
    if (this.right != other.right && (this.right == null ||
      !this.right.equals(other.right))) {
      return false;
    }
    return true;
  }

  @Override
  public int hashCode() {
    int hash = 5;
    hash = 53 * hash + (this.left != null ? this.left.hashCode() : 0);
    hash = 53 * hash + (this.right != null ? this.right.hashCode() : 0);
    return hash;
  }

  @Override
  public String toString() {
    return "(" + left + ", " + right + ")";
  }
}

Юзать так:

Map<String, Integer> m = map(p("three",3),p("two",2))
★★☆

Ответ на: комментарий от wfrr

а ну я торможу. Да, тогда, конечно надо быть последовательным.

maxcom ★★★★★
()
Ответ на: комментарий от dizza

Мой нетбинс подглючивает иногда но в целом подсказка сносная... хотя конечно ни одна ИДЕ не предлагает столько плюшек для скалы, сколько предлагает для джавы - в плане рефакторинга, генерации всего и вся... но на самом деле, имхо, все это вполне можно пережить.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.