如何映射具有特定值的 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().