java - 将单独的 ArrayList 添加到主 ArrayList 中

标签 java arrays list arraylist

我正在开发一个简单的 POS 程序。我有几个循环将零件信息添加到列表 (invoiceList),然后在另一个列表 (invoiceListMain) 下订购所有零件,然后将所有发票订购到主列表 (invoiceLogList)。所以基本上我在列表中有列表中的列表。

当我在 print 语句中输出整个列表时,这会起作用。但我需要能够打开列表。

[[738, [113, 5.0, 43.45], [248, 2.0, 12.78]], [459, [248, 10.0, 63.9], [113, 1.0, 8.69]]]

我收到这个错误

ArrayListDemo.java:136: 错误:类型不兼容:String 无法转换为 ArrayList for(ArrayList line : invoiceLogList)

当我这样做时:

for(int i=0; i < invoiceLogList.size(); i++)
         {
           for(ArrayList<String> line : invoiceLogList)
           {
              System.out.print(" \n" + line.get(0));
           }

         }

在负面评价之前,请留下原因。

通过研究,我认为这与我如何在列表中的列表中编译我的所有列表有关。

invoiceLogList.add(invoiceListMain.toString());

我必须添加 .toString() 才能使其正常工作。所以我的猜测是我不能将它解压缩为一个数组,因为它不再是一个数组?是 list 吗?我不是 100% 确定。

有没有人对更好的方法或如何解压缩其中的数据有建议?

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Random;


public class ArrayListDemo {

   public static void main(String[]args){

      //Part 1
      ArrayList<String> part1 = new ArrayList<String>();

      part1.add("06011");     
      part1.add("Castrol EDGE 0W20 Motor Oil - 1 qt");
      part1.add("9.49");

      //Part 2
      ArrayList<String> part2 = new ArrayList<String>();

      part2.add("248");     
      part2.add("Castrol EDGE 5W30 Motor Oil - 1 qt");
      part2.add("6.39");

      //Part 3   
      ArrayList<String> part3 = new ArrayList<String>();

      part3.add("03050");
      part3.add("Castrol Hypuron 10W30 Motor Oil - 1 gal");
      part3.add("6.39");

      //Part 4
      ArrayList<String> part4 = new ArrayList<String>();

      part4.add("113");
      part4.add("Castrol Pyroplex Protection ES Multi-Purpose Grease - 14 oz");
      part4.add("8.69");

      //Part 5
      ArrayList<String> part5 = new ArrayList<String>();

      part5.add("020");
      part5.add("Castrol GTZ ULTRACLEAN 5W20 Motor Oil - 6 gal");
      part5.add("69.99");


      //adding parts to main Part List
      ArrayList<ArrayList<String>> mainPartList = new ArrayList<ArrayList<String>>();

      mainPartList.add(part1);     
      mainPartList.add(part2);
      mainPartList.add(part3);
      mainPartList.add(part4);
      mainPartList.add(part5);


//-----INVOICE INPUT----------------------------------------------------------------------------

      //create a new scanner
      Scanner input = new Scanner(System.in);

      //Invoice Input
      String a = "";
      String invoiceNumber = "";
      String p = "";
      double q = 0.0;
      double partPrice = 0.0;
      double partSum = 0.0;
      String partNum = "";
      String partDescrip = "";
      String c = "";

      //Invoice Array

      ArrayList<String> invoiceLogList = new ArrayList<>();//Stores all invoices created
         do{//loop to create invoice

            ArrayList<String> invoiceListMain = new ArrayList<>();//stores individual invoices

            Random generator = new Random();//creates random invoice number     
            int sequence = generator.nextInt(1000);
            invoiceListMain.add(String.format("%03d", sequence));//invoice number
            System.out.print("Invoice #: " + sequence);

            do{//loop to add parts to invoice

               ArrayList<String> invoiceList = new ArrayList<String>();//stores part#, qty, sumTotal

               System.out.print("\n\nPart Number: ");
               p = input.next();

               //fetch part info from array mainPartList
               for(ArrayList<String> part : mainPartList)
               {
                  if(part.contains(p))
                  { 
                    for (int i = 0; i < 1; i++)
                       partNum = part.get(0);   
                       partDescrip = part.get(1);
                       invoiceList.add(partNum);//add part# to list
                       System.out.print("\t" + partNum + " - " + partDescrip);
                       partPrice = Double.parseDouble(part.get(2));//grabs price of part in list                   
                  }
               }

               System.out.print("\nQuantity: ");
               q = input.nextDouble(); //asks quantity sold
               invoiceList.add(Double.toString(q));//add quantity to list

               partSum = partPrice * q;
               invoiceList.add(Double.toString(partSum));//add part sum to list
               System.out.printf("\t $%.2f",partSum);

               System.out.print("\n\n---Add to cart?: ");
               c = input.next();

               invoiceListMain.add(invoiceList.toString());//adding part order to mainList

               }while(c.equalsIgnoreCase("Y")); 


             //Create Invoice Loop
             System.out.print("\n\nCreate a new Invoice? ");
             a = input.next();

             invoiceLogList.add(invoiceListMain.toString());

             }while(a.equalsIgnoreCase("Y"));



          //Print all invoices
          for(int i=0; i < invoiceLogList.size(); i++)
          {
            for(ArrayList<String> line : invoiceLogList)
            {
              System.out.print(" \n" + line.get(0));
            }

          }
   }
}

最佳答案

我尝试了那个例子,我得到的可能就是你想要的!

ArrayList<ArrayList<ArrayList<String>>> invoiceLogList= new ArrayList<ArrayList<ArrayList<String>>> ();
    ArrayList<ArrayList<String>> invoiceListMain= new ArrayList<ArrayList<String>>();
    ArrayList<String> c = new ArrayList<String>();
    c.add("13");
    c.add("50");
    c.add("43.45");
ArrayList<String> d = new ArrayList<String>();
d.add("728");
invoiceListMain.add(d);
invoiceListMain.add(c);
invoiceLogList.add(invoiceListMain);

  for(int i=0; i < invoiceLogList.size(); i++)
         {
           for(ArrayList<ArrayList<String>> line :invoiceLogList)
           {
              System.out.print(" \n" + line.get(0));
           }

         }

输出:

[728]
BUILD SUCCESSFUL (total time: 0 seconds)

关于java - 将单独的 ArrayList 添加到主 ArrayList 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50087537/

相关文章:

java - H2 是否为每个远程连接生成一个新线程?那么,有限制吗?

java - SQL JPA - 多列作为主键

javascript - 如何检查数组是否至少有一个负值?

java - 当前目录 java 中的文件和文件夹数组和有效字符串

C:在 main 中有一个指向指针的指针,并在其他函数中创建一个数组

python-3.x - 有没有更有效的方法将列表传递给 excel 文件(使用 Openpyxl)?

c++ - List vs Vector,在循环时删除一个元素

list - 以 'raw' ./2 格式显示列表

java - Jtextarea 中的阿姆哈拉语显示

java - 并发进程中的互斥