如何映射具有特定值的 ArrayList 元素,然后打印它
How to map ArrayList elements with specific values and then print it
ArrayList<Integer> companiesId = new ArrayList<>();
int numberOfCompanies = 10; // Just for example
...
float profit;
Scanner input = new Scanner(System.in);
for(int i = 0; i < 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 中的所有公司 ID,并为每个 ID 输入利润,但我不知道如何使用 ArrayList 来实现。
应该是:
1 1000
2 2000
...
您不能按照您的要求进行操作,因为您需要打印的部分信息(利润)丢失了。您首先需要做的是创建一个包含公司 ID 和利润的 class。使用新版本的 Java,您可以创建一个 record
来保存此类信息。 Java 记录只不过是一个用新关键字(记录)标识的 POJO,不需要您创建所有样板代码。您的记录 class 将如下所示:
public record CompanyRecord(int companyID, float profit) {
}
您甚至不需要覆盖 toString()
。也就是说,除非您想以不同于默认方式的方式打印记录的内容。然后,您需要创建 CompanyRecord
个对象的列表:
ArrayList<CompanyRecord> companies = new ArrayList<>();
然后,你想做什么就做什么。例如,我创建了这个简单的演示,它创建了一个包含 10 个公司记录的列表,并使用循环计数器来设置公司 ID 并作为利润的乘数。最后,它将记录打印到控制台。
public class CompanyRecordDemo {
public static void main(String[] args) {
ArrayList<CompanyRecord> companies = new ArrayList<>();
float profit = 1000.0f;
for (int i = 1; i <= 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 记录,但我建议您使用最新版本。
UPDATE:需要注意的一件重要事情是 Java 记录是不可变的。因此,它们没有设置器(增变器方法)。您将必须通过构造函数设置值,之后无法更改值。您可以通过调用与字段同名的方法来访问(获取)属性 值。例如,profit
的 getter 方法是 profit()
。例如 rec.profit()
.
ArrayList<Integer> companiesId = new ArrayList<>();
int numberOfCompanies = 10; // Just for example
...
float profit;
Scanner input = new Scanner(System.in);
for(int i = 0; i < 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 中的所有公司 ID,并为每个 ID 输入利润,但我不知道如何使用 ArrayList 来实现。
应该是:
1 1000
2 2000
...
您不能按照您的要求进行操作,因为您需要打印的部分信息(利润)丢失了。您首先需要做的是创建一个包含公司 ID 和利润的 class。使用新版本的 Java,您可以创建一个 record
来保存此类信息。 Java 记录只不过是一个用新关键字(记录)标识的 POJO,不需要您创建所有样板代码。您的记录 class 将如下所示:
public record CompanyRecord(int companyID, float profit) {
}
您甚至不需要覆盖 toString()
。也就是说,除非您想以不同于默认方式的方式打印记录的内容。然后,您需要创建 CompanyRecord
个对象的列表:
ArrayList<CompanyRecord> companies = new ArrayList<>();
然后,你想做什么就做什么。例如,我创建了这个简单的演示,它创建了一个包含 10 个公司记录的列表,并使用循环计数器来设置公司 ID 并作为利润的乘数。最后,它将记录打印到控制台。
public class CompanyRecordDemo {
public static void main(String[] args) {
ArrayList<CompanyRecord> companies = new ArrayList<>();
float profit = 1000.0f;
for (int i = 1; i <= 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 记录,但我建议您使用最新版本。
UPDATE:需要注意的一件重要事情是 Java 记录是不可变的。因此,它们没有设置器(增变器方法)。您将必须通过构造函数设置值,之后无法更改值。您可以通过调用与字段同名的方法来访问(获取)属性 值。例如,profit
的 getter 方法是 profit()
。例如 rec.profit()
.