Цикл foreach Java: Порядок сортировки [дубликат]

Я использую мой ruleOut функция для фильтрации объектов на основе [1 120] определенные нежелательные значения свойств. я понимаю, что в Вашем примере требуется использовать условия вместо значений, но мой ответ действителен для заголовка вопроса, таким образом, я хотел бы оставить свой метод здесь.

function ruleOut(arr, filterObj, applyAllFilters=true) {    
    return arr.filter( row => {            
        for (var field in filterObj) {
            var val = row[field];
            if (val) {                    
                if (applyAllFilters && filterObj[field].indexOf(val) > -1) return false;                
                else if (!applyAllFilters) {                        
                    return filterObj[field].filter(function(filterValue){ 
                        return (val.indexOf(filterValue)>-1);
                    }).length == 0;                 
                }
            }
        }
        return true;
    });
}

Говорят, что у Вас есть список агентов как это:

let actors = [
  {userName:"Mary", job:"star", language:"Turkish"},
  {userName:"John", job:"actor", language:"Turkish"},
  {userName:"Takis", job:"star", language:"Greek"},
  {userName:"Joe", job:"star", language:"Turkish"},
  {userName:"Bill", job:"star", language:"Turkish"}
];

и требуется найти всех агентов, которые оцениваются как звезды Холивуда, их национальность не должна быть одним из 'англичан', 'итальянца', 'испанцев', 'грек', плюс их имя не был бы одной из 'Mary', 'Joe'. Пример Bizzar, я знаю! Так или иначе с тем набором условий Вы создали бы следующий объект:

let unwantedFieldsFilter= { 
  userName: ['Mary', 'Joe'],    
  job: ['actor'],   
  language: ['English', 'Italian', 'Spanish', 'Greek']  
};

хорошо, теперь если Вы ruleOut(actors, unwantedFieldsFilter) Вы только добрались бы

[{имя пользователя: "Счет", задание: "звезда", язык: "Турецкий язык"}]

И счет является Вашим человеком, с тех пор его зовут не одна из 'Mary', 'Joe', его национальность не включена в ['английский', 'итальянский', 'испанский', 'греческий язык'] плюс, он - Звезда!

в моем методе существует одна опция, который является applyAllFilters и верен по умолчанию. Если бы Вы попробовали бы к ruleOut этим набором параметрического усилителя как ложь, которая работала бы 'ИЛИ' фильтрующий вместо 'И'. Пример: ruleOut(actors, {job:["actor"], language:["Italian"]}, false) получил бы Вас все, которые не являются агентом или итальянским языком:

[{имя пользователя: "Mary", задание: "звезда", язык: "Турецкий язык"},
{имя пользователя: "Takis", задание: "звезда", язык: "Греческий язык"},
{имя пользователя: "Joe", задание: "звезда", язык: "Турецкий язык"},
{имя пользователя: "Счет", задание: "звезда", язык: "Турецкий язык"}]

47
задан Mike 4 September 2009 в 02:24
поделиться

4 ответа

Да. Цикл foreach будет перебирать список в порядке, указанном методом iterator () . См. Документацию для интерфейса Iterable .

Если вы посмотрите Javadoc for List , вы увидите, что список является «упорядоченной коллекцией» и что итератор () метод возвращает итератор, который выполняет итерацию «в правильной последовательности».

48
ответ дан 26 November 2019 в 19:45
поделиться

Да, спецификации языка Java гарантируют, что

for (Iterator<Whatever> i = c.iterator(); i.hasNext(); )
    whatEver(i.next());

эквивалентен

for (Whatever x : c)
    whatEver(x);

, никакое «изменение порядка» не допускается.

10
ответ дан 26 November 2019 в 19:45
поделиться

Вы можете использовать цикл for, например, for (int i = 0; i , если хотите сделать это в упорядоченным образом. Хотя, насколько мне известно, foreach должен делать это по порядку.

3
ответ дан 26 November 2019 в 19:45
поделиться

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

Итак, если вы перебираете ArrayList , вы получите элементы в том порядке, в котором они были вставлены (при условии, что вы не продолжили сортировку ArrayList). Если вы перебираете HashSet , все ставки отключены, поскольку HashSets не поддерживает какой-либо порядок.

Если вам нужно гарантировать порядок элементов в Коллекции, определите Компаратор , который устанавливает этот порядок и использует Collections.sort (Collection , Comparator ) .

15
ответ дан 26 November 2019 в 19:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: