Java: Get first item from a collection
Jeśli mam kolekcję, taką jak Collection<String> strs
, Jak mogę uzyskać pierwszy przedmiot? Mogę po prostu zadzwonić do Iterator
, wziąć pierwszy next()
, a następnie wyrzucić Iterator
. Czy jest na to mniej marnotrawny sposób?
10 answers
Iterables.get (yourC, indexYouWant)
Ponieważ tak naprawdę, jeśli używasz kolekcji, powinieneś używać kolekcji Google.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-08 09:53:32
Wygląda na to, że to najlepszy sposób, aby to zrobić:
String first = strs.iterator().next();
Świetne pytanie... Na początku wygląda to na przeoczenie interfejsu Collection
.
Zauważ, że "first" nie zawsze zwróci pierwszą rzecz, którą umieścisz w kolekcji i może mieć sens tylko dla uporządkowanych kolekcji. Może dlatego nie ma get(item)
wywołania, ponieważ kolejność niekoniecznie jest wytrwała.
Iterator
naprawdę zawiera indeksowanie informacji do zbioru, a nie zazwyczaj Kopia całego zbioru. Wywołanie tej metody powoduje utworzenie obiektu Iterator
, ale jest to w rzeczywistości jedyne narzuty (nie tak jak kopiowanie wszystkich elementów).
Na przykład, patrząc na typ zwracany przez metodę ArrayList<String>.iterator()
, widzimy, że jest to ArrayList::Itr
. Jest to klasa wewnętrzna, która po prostu uzyskuje bezpośredni dostęp do elementów listy, a nie kopiuje je.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-04 02:39:55
W Javie 8:
Optional<String> firstElement = collection.stream().findFirst();
Dla starszych wersji Javy istnieje metoda getFirst w Guava Iterables:
Iterables.getFirst(iterable, defaultValue)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-29 15:23:09
Nie ma czegoś takiego jak "pierwszy" element w Collection
, ponieważ jest .. cóż, po prostu kolekcja.
Z kolekcji Java doc.metoda iterator () :
Więc nie możesz.]}nie ma gwarancji co do kolejności zwrotu elementów...
Jeśli używasz innego interfejsu, takiego jak List, możesz wykonać następujące czynności:
String first = strs.get(0);
Ale bezpośrednio ze zbioru nie jest to możliwe.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-04 02:34:29
Wygląda na to, że Twoja kolekcja chce być listowa, więc proponuję:
List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-04 02:34:30
W Javie 8 można używać wielu operatorów, na przykład limit
/**
* Operator that limit the total number of items emitted through the pipeline
* Shall print
* [1]
* @throws InterruptedException
*/
@Test
public void limitStream() throws InterruptedException {
List<Integer> list = Arrays.asList(1, 2, 3, 1, 4, 2, 3)
.stream()
.limit(1)
.collect(toList());
System.out.println(list);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-11 08:18:47
Możesz zrobić casting. Na przykład, jeśli istnieje jedna metoda z tą definicją i wiesz, że ta metoda zwraca listę:
Collection<String> getStrings();
I po wywołaniu go potrzebujesz pierwszego elementu, możesz to zrobić tak:
List<String> listString = (List) getStrings();
String firstElement = (listString.isEmpty() ? null : listString.get(0));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-09 09:45:27
Jeśli wiesz, że kolekcja jest kolejką, możesz wrzucić ją do kolejki i łatwo ją uzyskać.
Istnieje kilka struktur, których możesz użyć, aby uzyskać zamówienie, ale musisz do niego rzucić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-04 02:33:30
To całkowicie zależy od tego, jakiej implementacji użyłeś, czy ArrayList linkedlist, czy innych implementacji set.
Jeśli jest ustawione, to można bezpośrednio uzyskać pierwszy element, ich pętla może być tricka nad kolekcją, utworzyć zmienną o wartości 1 i uzyskać wartość, gdy wartość znacznika jest 1 po tym przerwaniu pętli.
Jeśli jest implementacją list, to jest to łatwe przez zdefiniowanie numeru indeksu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-28 10:12:07
Możesz to zrobić:
String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];
Javadoc Dla Kolekcji daje następujące zastrzeżenie wrt uporządkowanie elementów tablicy:
Jeśli zbiór ten daje jakiekolwiek gwarancje, w jakiej kolejności jego elementy są zwracane przez iterator, metoda ta musi zwrócić elementy w tej samej kolejności.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-04 02:32:07