如何使用特定值映射 ArrayList 元素然后打印它

Posted

技术标签:

【中文标题】如何使用特定值映射 ArrayList 元素然后打印它【英文标题】:How to map ArrayList elements with specific values and then print it 【发布时间】:2022-01-03 06:05:48 【问题描述】:
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 中的所有 companyIds,并为每个 id 输入利润,但我不知道如何使用 ArrayList。

应该是:

1 1000
2 2000
... 

   

【问题讨论】:

我希望我的答案正是您想要的。 【参考方案1】:

您不能按照您的要求去做,因为您需要打印的部分信息(利润)丢失了。您首先需要做的是创建一个包含公司 ID 和利润的类。使用新版本的 Java,您可以创建一个 record 来保存此类信息。 Java 记录只不过是一个用该新关键字(记录)标识的 POJO,并且不需要您创建所有样板代码。您的记录类将如下所示:

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 Records,但我建议您使用最新版本。

更新:需要注意的重要一点是 Java 记录是不可变的。因此,它们没有设置器(mutator 方法)。您必须通过构造函数设置值,之后不能更改值。您可以通过调用与字段同名的方法来访问(获取)属性值。例如,profit 的 getter 方法是 profit()。例如rec.profit()

【讨论】:

以上是关于如何使用特定值映射 ArrayList 元素然后打印它的主要内容,如果未能解决你的问题,请参考以下文章

将值映射到 ArrayList

如何知道映射表中是不是存在特定值?

映射和传递 onClick 函数作为道具后如何定位特定元素

将向量映射到特定范围

Arraylist交换元素[重复]

如何告诉 MapperModel 的映射函数特定字段应该具有特定值?