Отображение списка объектов линейным способом - PullRequest
0 голосов
/ 10 января 2020

Рассмотрим два объекта, а именно

Person -> name, age, salary, address, sqFootage

House  -> address, sqFootage

, которые содержат заданные параметры.

Мне нужно сопоставить данные из списка домов (List) со списком людей (List). Условие состоит в том, что человек 1 владеет единственным первым домом, а первый дом принадлежит только первому человеку, т. Е. Отображение один на один. Я пытаюсь улучшить логику c Я написал. Какие еще способы я могу попробовать следующий код?

for(int i =0; i<personList.size(); i++){
    for( int j = 0; j<houseList.size(); j++){
        if( i == j){
            personList.get(i).setAddress(houseList.get(j).getAddress);
            personList.get(i).setSqFootage(houseList.get(j).getSqFootage)
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Вы используете ненужные вложенные l oop. Если человек с индексом 1 владеет домом с индексом 1, personList и houseList имеют одинаковый размер, вы можете сделать это, используя один для l oop, или вы можете использовать IntStream для итерации по требуемый диапазон (0, personList.size()):

IntStream.range(0,  personList.size()).forEach(i -> { 
    personList.get(i).setAddress(houseList.get(i).getAddress());
    personList.get(i).setSqFootage(houseList.get(i).getSqFootage());
});

С вложенным для l oop в вопросе:

e.g. 3 person - 3 houses

person      house
0           0   // if( i == j) -> true, assign house(0) to person(0)
0           1   // unnecessary step
0           2   // ...
1           0   // ...
1           1   // if( i == j) -> true, assign house(1) to person(1)
1           2   // unnecessary step
2           0   // ...
2           1   // ...
2           2   // if( i == j) -> true, assign house(2) to person(2)

Таким образом, вы l oop 9 раз, но назначаете дом для человек всего 3 раза.

1 голос
/ 10 января 2020

Для начала, не думайте, что вам нужен вложенный l oop (потому что есть однозначное отображение), поэтому что-то вроде этого должно работать:

for(int i =0; i<personList.size(); i++){
    personList.get(i).setAddress(houseList.get(i).getAddress());
    personList.get(i).setSqFootage(houseList.get(i).getSqFootage());
}
...