Как сопоставить элементы ArrayList с определенными значениями, а затем распечатать их

#java #for-loop #arraylist #iteration

Вопрос:

 ArrayListlt;Integergt; companiesId = new ArrayListlt;gt;(); int numberOfCompanies = 10; // Just for example ... float profit; Scanner input = new Scanner(System.in);  for(int i = 0; i lt; numberOfCompanies; i  ) {  int companyId = input.nextInt();   if (!companiesId.contains(companyId)) {  companiesId.add(companyId);  }   if (companiesId.get(i) == 1) {  profit = 1000;   } else if (companiesId.get(i) == 2) {  profit = 2000;  }  }  

Теперь я хочу распечатать все идентификаторы компании из ArrayList с прибылью, введенной для каждого идентификатора, но я не знаю, как это сделать с ArrayList.

Это должно быть:

 1 1000 2 2000 ...      

Комментарии:

1. Я надеюсь, что мой ответ-именно то, что вы искали.

Ответ №1:

Вы не можете сделать то, о чем просите, потому что часть информации, которую вам нужно распечатать (прибыль), потеряна. Что вам нужно сделать в первую очередь, так это создать класс, содержащий идентификатор компании и прибыль. С помощью новой версии Java вы можете создать record приложение, которое будет содержать такую информацию. Запись Java-это не что иное, как POJO, которое идентифицируется с этим новым ключевым словом (запись) и не требует от вас создания всего стандартного кода. Ваш класс записи будет выглядеть примерно так:

 public record CompanyRecord(int companyID, float profit) { }  

Вам даже не нужно переопределять toString() . То есть, если вы не хотите печатать содержимое записи иным способом, чем по умолчанию. Затем вам нужно будет создать список CompanyRecord объектов:

 ArrayListlt;CompanyRecordgt; companies = new ArrayListlt;gt;();  

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

 public class CompanyRecordDemo {  public static void main(String[] args) {  ArrayListlt;CompanyRecordgt; companies = new ArrayListlt;gt;();  float profit = 1000.0f;  for (int i = 1; i lt;= 10; i  ) {  CompanyRecord rec = new CompanyRecord(i, profit * i);  companies.add(rec);  System.out.println(rec);  }  // do whatever you need with the list...  } }  

Результатом этой небольшой программы является:

 CompanyRecord[companyID=1, profit=1000.0] CompanyRecord[companyID=2, profit=2000.0] CompanyRecord[companyID=3, profit=3000.0] CompanyRecord[companyID=4, profit=4000.0] CompanyRecord[companyID=5, profit=5000.0] CompanyRecord[companyID=6, profit=6000.0] CompanyRecord[companyID=7, profit=7000.0] CompanyRecord[companyID=8, profit=8000.0] CompanyRecord[companyID=9, profit=9000.0] CompanyRecord[companyID=10, profit=10000.0]  

Это, вероятно, самый простой способ выполнить то, что вам нужно. Вам нужно будет использовать Java 14 или более позднюю версию, чтобы использовать записи Java, но я рекомендую вам использовать последнюю версию.

ОБНОВЛЕНИЕ: Важно отметить, что записи Java являются неизменяемыми. Таким образом, у них нет сеттеров (методов мутаторов). Вам придется задать значения через конструктор, и впоследствии значения не могут быть изменены. Вы можете получить доступ (получить) к значениям свойств, вызвав метод, имя которого совпадает с именем поля. Например, метод получения для profit is profit() . Например rec.profit() .