Лучший способ сравнить d в if ifment. Что если мне нужно сравнить это, чтобы сказать 100 значений? - PullRequest
0 голосов
/ 25 августа 2018

Лучший способ сравнить d в операторе if. Что если мне нужно сравнить это, чтобы сказать 100 значений?

int d = 0;
if(d == 3 || d == 8 || d == 1) {
   System.out.println("d is one of the special numbers!");
}

Ответы [ 5 ]

0 голосов
/ 25 августа 2018
Integer a = 5;
List<Integer> ints = Arrays.asList(1,2,3,4,5,6);
Stream.of(a).anyMatch(ints::contains); // this will return boolean

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

List<Integer> ints = Arrays.asList(1,2,3,4,5,6);
Stream.of(1,2,3,4,5).allMatch(ints::contains); // true;
Stream.of(1,2,7).allMatch(ints::contains); // false;

Также,обратите внимание на NPE, если вы передадите Stream.of () значение null, возникнет NullPointerException.

Но это не проблема, если вы используете

Optional.of(ints).orElse(new ArrayList<>()).stream().allMatch(ints::contains)

Я бы предпочел использоватьДля моего кода используются общие коллекции apache, есть Collections.emptyIfNull().stream() ... хороший метод.

0 голосов
/ 25 августа 2018

Поскольку ваши элементы будут уникальными, лучше хранить их в хэш-наборе.

Посмотрите: Производительность хэш-набора и списка массивов

Set<Integer> mySet = new HashSet<Integer>();
mySet.add(2);
mySet.add(3);
mySet.add(4);
....

if(mySet.contains(d)) {
   System.out.println(d + " is one of the special numbers!");
}
0 голосов
/ 25 августа 2018

Вы можете создать список специальных чисел, а затем перебирать их, сравнивая с каждым значением в списке:

List<Integer> specialNumbers = Arrays.asList('1', '3', '8');
        int d = '7';
        for (Integer specialNumber : specialNumbers) {
            if (userInput == specialNumber) {
                System.out.println("You've entered one of the special numbers!")
            }
        }
0 голосов
/ 25 августа 2018

Если вы не можете использовать массив или список, используйте переключатель:

switch (d) {
    case 1:
    case 3:
    case 8:  System.out.println("d is one of the special numbers");
             break;
    default: break; // Fall through in case d isn't a special number
}

break является здесь важным ключевым словом, case в основном просматривает каждое значение и проверяет, равно ли d, а затем выполняет все найденные операторы после сопоставления с d, пока не достигнет оператора break. Например, если бы я поставил:

switch (d) {
    case 1: System.out.println("d equals 1");
    case 3: System.out.println("d equals 3");
            break;
    /* More examples*/
}

и проверил его, когда d = 1, он вывел бы «d равно 1» и «d равно 3».

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

0 голосов
/ 25 августа 2018

Вы можете создать список, содержащий числа, а затем использовать этот список для фильтрации в операторе if:

List<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(3);
nums.add(8);

if (nums.contains(d)) {
    System.out.println("d is one of the special numbers!");
}

Это может не работать так, как если бы числа были непосредственно в операторе if. Но, с точки зрения читабельности и обслуживания кода, это лучший вариант IMO.

Или мы могли бы использовать HashSet, который мог бы выиграть от постоянного времени поиска:

Set<Integer> set = new HashSet<>();

Затем, после заполнения номеров, мы позвоним set.contains(d), чтобы проверить номер.

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