9 ответов:
Collection c; Iterator iter = c.iterator(); Object first = iter.next();(это самое близкое, что вы получите, чтобы иметь "первый" элемент a
Set. Вы должны понимать, что это не имеет абсолютно никакого смысла для большинства реализацийSet. Это может иметь значение для LinkedHashSet и TreeSet, но не для HashSet.)
в Java >=8 Вы также можете использовать потоковый API:
Optional<String> first = set.stream().findFirst();(полезно, если набор/список может быть пустым.)
Я удивлен, что никто еще не предложил решение гуавы:
com.google.common.collect.Iterables.get(collection, 0) // or com.google.common.collect.Iterables.get(collection, 0, defaultValue) // or com.google.common.collect.Iterables.getFirst(collection, defaultValue)или если вы ожидаете одного элемента:
com.google.common.collect.Iterables.getOnlyElement(collection, defaultValue) // or com.google.common.collect.Iterables.getOnlyElement(collection)
предположим, что у вас есть
List<String> stringsчто вы хотите первый пункт из.есть несколько способов сделать это:
Java (pre-8):
String firstElement = null; if (!strings.isEmpty() && strings.size() > 0) { firstElement = strings.get(0); }Java 8:
Optional<String> firstElement = strings.stream().findFirst();гуавы
String firstElement = Iterables.getFirst(strings, null);Apache commons (4+)
String firstElement = (String) IteratorUtils.get(strings, 0);Apache commons (до 4)
String firstElement = (String) CollectionUtils.get(strings, 0);следовать или помещенный внутри соответствующие проверки или блоки try-catch.
Это не точный ответ на этот вопрос, но в случае, если объекты должны быть отсортированы набор, имеет первый() метод:
SortedSet<String> sortedSet = new TreeSet<String>(); sortedSet.add("2"); sortedSet.add("1"); sortedSet.add("3"); String first = sortedSet.first(); //first="1"сортированные объекты должны реализовывать сопоставимый интерфейс (например, String)
java8 и далее
Set<String> set = new TreeSet<>(); set.add("2"); set.add("1"); set.add("3"); String first = set.stream().findFirst().get();это поможет вам получить первый элемент списка или набора. Учитывая, что набор или список не пуст (
get()на пустой необязательный броситjava.util.NoSuchElementException)
orElse()может использоваться как: (это просто работа вокруг - не рекомендуется)String first = set.stream().findFirst().orElse(""); set.removeIf(String::isEmpty);Ниже приведен соответствующий подход:
Optional<String> firstString = set.stream().findFirst(); if(firstString.isPresent()){ String first = firstString.get(); }аналогично первый элемент списка может быть восстановленный.
надеюсь, что это помогает.
вы можете использовать метод get(index) для доступа к элементу из списка.
наборы, по определению, просто содержат элементы и не имеют определенного порядка. Поэтому нет никакого" первого " элемента, который вы можете получить, но его можно перебирать с помощью итератора (используя для каждого цикла) или преобразовать в массив с помощью метода toArray ().
Comments