Небольшой совет как писать меньше кода в убогом недоязычке 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))