Java: получить первый элемент из коллекции - программирование
Подтвердить что ты не робот

Java: получить первый элемент из коллекции

Если у меня есть коллекция, например Collection<String> strs, как я могу получить первый элемент? Я мог бы просто вызвать Iterator, взять его первый next(), а затем выбросить Iterator. Есть ли менее расточительный способ сделать это?

4b9b3361

Ответ 1

Iterables.get(yourC, indexYouWant)

Потому что, действительно, если вы используете Коллекции, вы должны использовать Коллекции Google.

Ответ 2

Похоже, это лучший способ сделать это:

String first = strs.iterator().next();

Большой вопрос... Сначала это выглядит как надзор для интерфейса Collection.

Обратите внимание, что "first" не всегда возвращает первое, что вы помещаете в коллекцию, и может иметь смысл только для упорядоченных коллекций. Возможно, поэтому нет вызова get(item), так как порядок не обязательно сохраняется.

Хотя это может показаться немного расточительным, это может быть не так плохо, как вы думаете. Iterator действительно содержит информацию индексирования в коллекции, а не обычно копию всей коллекции. Вызов этого метода создает экземпляр объекта Iterator, но это действительно единственные накладные расходы (не как копирование всех элементов).

Например, глядя на тип, возвращаемый методом ArrayList<String>.iterator(), мы видим, что это ArrayList::Itr. Это внутренний класс, который просто обращается к элементам списка напрямую, а не копирует их.

Ответ 3

В java 8:

Optional<String> firstElement = collection.stream().findFirst();

Для более старых версий java существует метод getFirst в Guava Iterables:

Iterables.getFirst(iterable, defaultValue)

Ответ 4

В Collection нет такой вещи, как "первый" элемент, потому что это... ну просто коллекция.

Из документа Java метода Collection.iterator():

Нет гарантий относительно порядка возврата элементов...

Итак, вы не можете.

Если вы используете другой интерфейс, например Список, вы можете сделать следующее:

String first = strs.get(0);

Но прямо из коллекции это невозможно.

Ответ 5

Похоже, ваша коллекция хочет быть похожей на List, поэтому я предлагаю:

List<String> myList = new ArrayList<String>();
...
String first = myList.get(0);

Ответ 6

В Java 8 у вас есть несколько операторов для использования, например 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);
}

Ответ 7

Вы можете сделать кастинг. Например, если существует один метод с этим определением, и вы знаете, что этот метод возвращает список:

Collection<String> getStrings();

И после вызова, вам нужен первый элемент, вы можете сделать это следующим образом:

List<String> listString = (List) getStrings();
String firstElement = (listString.isEmpty() ? null : listString.get(0));

Ответ 8

Если вы знаете, что коллекция является очередью, вы можете бросить коллекцию в очередь и получить ее легко.

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

Ответ 9

Это полностью зависит от того, какую реализацию вы использовали, будь то связанный с arraylist или другие реализации набора.

если он установлен, вы можете напрямую получить первый элемент, их может быть трюком по коллекции, создать переменную с номером 1 и получить значение, когда значение флага равно 1 после того, как этот цикл прерывается.

если это реализация списка, тогда легко определить номер индекса.

Ответ 10

Вы можете сделать это:

String strz[] = strs.toArray(String[strs.size()]);
String theFirstOne = strz[0];

javadoc for Collection предоставляет следующие предостережения для упорядочения элементов массива:

Если этот сборник дает какие-либо гарантии относительно того, в каком порядке его элементы возвращаются его итератором, этот метод должен возвращать элементы в том же порядке.