2012-04-11 10 views
29

szukam statycznej metody w rdzeniu bibliotek Java lub innej powszechnie stosowanych uzależnienia - najlepiej jednego Apache - które wykonuje następujące czynności:metoda Narzędzie do owijania obiekt w kolekcji

public static <T> Collection<T> wrap(final T object){ 
    final Collection<T> collection = new ArrayList<T>(); 
    collection.add(object); 
    return collection; 
} 

Wykonaj wiesz, gdzie taka metoda już istnieje? Ponieważ wydaje mi się, że problem jest powszechny, nie chcę duplikować jego rozwiązania.

Odpowiedz

55

java.util.Collections.singleton(object) da ci niezmienny Set. singletonList jest również dostępna.

mniej wydajnie java.util.Arrays.asList(object) daje zmienny (można użyć list.set(0, x);), ale nie strukturalnie zmienny (nie może dodać lub usunąć) List. Jest nieco droższy, ponieważ istnieje dodatkowa tablica, która jest tworzona po stronie klienta.

+0

Istnieje również '' 'Collections.singletonList (object)' ''. – drindt

1

Nie bój się pisać czegoś samemu. O ile mi wiadomo, nie istnieje. Myślę, że jest to spowodowane tym, że metoda użyteczności decyduje o tym, z której wersji korzysta. W twoim przypadku wybrałeś dla ArrayList, ale istnieje cała masa innych kolekcji.

2

Immutable list in guava

public static <E> ImmutableList<E> of(E element) 

Zwraca niezmienny wykaz zawierający pojedynczy element. Ta lista: zachowuje się i wykonuje porównywalnie do Collections.singleton (T), ale nie będzie akceptować elementu zerowego . Preferowane jest przede wszystkim zachowanie spójności kodu i konserwacja.

+0

Dziękuję za podpowiedź, ale niestety nie mogę użyć Guawy. –

1

java.util.Collections.singletonList() lub singleton(). Pamiętaj jednak, że wynik jest niezmienny.

9

Oto kilka skutecznych sposobów, aby osnowa obiekt (-y) Java w postaci listy, jak Java 8.

kolekcjach. singletonList: Pojedynczy przedmiot, niezmienny, ponieważ 1.3.
Collections.singletonList(object)
Wysoka wydajność wspierana przez klasę wewnętrzną.

Kolekcje. nCopies: Jeden obiekt, zero na wiele pozycji, niezmienny, od 1.2.
Collections.nCopies(number_of_copy, object)
Wysoka wydajność wspierana przez klasę wewnętrzną. Wszystkie elementy wskazują na ten sam obiekt.

Array. asList: Dowolna liczba obiektów, rozmiar niezmienna (poszczególne elementy zmienne), od 1.2.
Arrays.asList(object1, object2, object3)
Wspierane przez klasę wewnętrzną. Elementy są konwertowane na tablicę at compile time i ta tablica bezpośrednio wspiera Listę.

nowy ArrayList(Collection): Dowolna liczba obiektów, zmienna, ponieważ 1.2
new ArrayList<>(Arrays.asList(object1, object2, object3))
ArrayList jest tworzony z array clone i array copy, więc nie używa żadnych pętli.

Powiązane problemy