Один лайнер, чтобы проверить, есть ли элемент в списке - PullRequest
36 голосов
/ 25 января 2010

Я работал и выключался с Java / Python. Теперь в этой ситуации я хочу проверить, есть ли элемент в списке, и делать что-то ...

Python говорит:

if "a" in ["a", "b", "c"]:
    print "It's there!"

Предоставляет ли java какой-либо один вкладыш для этого, вместо того, чтобы создавать ArrayList / Set или подобную структуру данных по шагам и добавлять к ней элементы?

Спасибо

Ответы [ 8 ]

80 голосов
/ 25 января 2010

Использование Arrays.asList:

if( Arrays.asList("a","b","c").contains("a") )
12 голосов
/ 25 января 2010

В интерфейсе List есть метод логического содержания (Object obj).

Вы должны быть в состоянии сказать:

if (list.contains("a")) {
    System.out.println("It's there");
}

Согласно Javadoc :

boolean contains(Object o)</p>

<code>Returns true if this list contains the specified element. 
More formally, returns true if and only if this list contains at 
least one element e such that (o==null ? e==null : o.equals(e)).
</code>

8 голосов
/ 25 января 2010

В JDK7:

if ({"a", "b", "c"}.contains("a")) {

Предполагается, что проект литералов коллекций монет проекта завершен.

Редактировать: Это не так.

3 голосов
/ 25 января 2010

Вы можете попробовать использовать строки с разделителем, который отсутствует ни в одном элементе.

if ("|a|b|c|".contains("|a|"))
1 голос
/ 25 января 2010

Вы можете использовать java.util.Arrays.binarySearch, чтобы найти элемент в массиве или проверить его существование:

import java.util.Arrays;
...

char[] array = new char[] {'a', 'x', 'm'};
Arrays.sort(array); 
if (Arrays.binarySearch(array, 'm') >= 0) {
    System.out.println("Yes, m is there");
}

Помните, что для правильной работы binarySearch необходимо отсортировать массив. Отсюда и вызов Arrays.sort () в примере. Если ваши данные уже отсортированы, вам не нужно это делать. Таким образом, это не является строго однострочным, если вам нужно сначала отсортировать массив. К сожалению, Arrays.sort () не возвращает ссылку на массив - поэтому невозможно объединить sort и binarySearch (т.е. Arrays.binarySearch (Arrays.sort (myArray), key)) не работает).

Если вы можете позволить себе дополнительное выделение, использование Arrays.asList () кажется более чистым.

0 голосов
/ 25 февраля 2019

Я бы использовал:

if (Stream.of("a","b","c").anyMatch("a"::equals)) {
    //Code to execute
};

или

Stream.of("a","b","c")
    .filter("a"::equals)
    .findAny()
    .ifPresent(ignore -> /*Code to execute*/);
0 голосов
/ 02 февраля 2019
 public class Itemfound{ 
        public static void main(String args[]){

                if( Arrays.asList("a","b","c").contains("a"){
                      System.out.println("It is here");
         }
    }

}

Это то, что вы ищете. Метод contains () просто проверяет индекс элемента в списке. Если индекс больше '0', то элемент присутствует в списке.

public boolean contains(Object o) {
return indexOf(o) >= 0;
}
0 голосов
/ 25 января 2010

Если он действительно хочет один вкладыш без каких-либо сборов, хорошо, он может иметь один:

for(String s:new String[]{"a", "b", "c")) if (s.equals("a")) System.out.println("It's there");

* улыбка *

(Разве это не уродливо? Пожалуйста, не используйте его в реальном коде)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...