Как установить одинаковое значение для диапазона в массиве в Java в одну строку? - PullRequest
0 голосов
/ 30 июня 2018

Допустим, у меня есть массив из 100 элементов, и я хочу, чтобы определенный диапазон индексов имел определенное значение. Например, индексы с 0 по 10 будут иметь «Боб», индексы с 11 по 57 будут иметь «Джейк», а индексы с 58 по 99 будут иметь «Джон». Это возможно сделать в одну строку? Спасибо

Ответы [ 3 ]

0 голосов
/ 30 июня 2018

Вот одна строка для Bob.

 for(int i=0; i<10; i++) myArray[i]="Bob";

Я бы написал метод:

static void fillRange(String[] arr, int from, int to, String val){
    for(int i=from; i<=to; i++) arr[i]=val;
}

и затем назовите это:

 fillRange(myArray, 0, 10, "Bob"); fillRange(myArray, 11, 57, "Jake");...

Но вы должны убедиться, что ваш массив уже содержит необходимый диапазон:

 int arrLength = 99;
 ....
 String[] myArray = new String[arrLength];
0 голосов
/ 30 июня 2018

Во многих языках было бы просто установить все параметры в кортеже и оценить их как понимание списка. Тем не менее, Java не очень хорошо подходит для выполнения подобных вещей в одном выражении.

Arrays.stream(new Object[] {
    new Object[] {0,10,"Bob"},
    new Object[] {11,57,"Jake"},
    new Object[] {58,99,"John"}
}).forEach(objs -> Arrays.fill(myArray,
            (int)(((Object[]) objs)[0]),
            ((int)(((Object[]) objs)[1]))+1,
            ((Object[]) objs)[2])
);

Или, если вы хотите злоупотребить троичным оператором, вы можете использовать этот прекрасный драгоценный камень (кредиты Йоханнес Кун ):

Arrays.setAll(myArray, i -> i <= 10 ? "Bob" : i <= 57 ? "Jake" : "John");

Однако мораль этой истории такова: только то, что вы можете сделать что-то в одной строке, не означает, что вы должны . Ясность важнее.

0 голосов
/ 30 июня 2018

Да. Вы можете использовать IntStream.range(int, int) для генерации диапазона, а затем отобразить на String с вложенными троицами. Как,

System.out.println(Arrays.toString(IntStream.range(0, 100)
        .mapToObj(i -> i < 11 ? "Bob" : i < 58 ? "Jake" : "John")
        .toArray()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...