从Bean类</userbean> </string>的ArrayList <userbean>创建一个新的ArrayList <string>

时间:2013-04-11 11:21:46

标签: java collections arraylist

我有一个bean类的ArrayList,包含五个字段

Java Bean - MyShares

  1. 文件名
  2. 文件路径
  3. 档案大小
  4. isShared
  5. 创建者
  6. 我想从这个bean类

    的arraylist中创建一个fileList的ArrayList

    我对Java集合没有丰富的知识。那么这将是最短的逻辑。

    我现在实现的逻辑如下,现在我想要一个优化的逻辑来

    ArrayList<Myshares> fileDetails = new ReadSDCard().getSdCardFiles();
    
            if (!fileDetails.isEmpty()) {
    
                for (int i = 0; i < fileDetails.size(); i++) {
                    CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
                }
            }
    
            if (!CommonUtilities.filePaths.isEmpty()) {
    
                for (int i = 0; i < CommonUtilities.filePaths.size(); i++) {
    
                    Log.d(Integer.toString(i), CommonUtilities.filePaths.get(i));
                }
            }
    

    CommonUtilities.filePaths是我的静态ArrayList,我想在其中存储文件路径

3 个答案:

答案 0 :(得分:1)

你做的很好但是你需要在插入null之前检查路径是否为CommonUtilities.filePaths。您也可以使用迭代器而不是for循环。

您可以避免两个for循环,只需执行以下操作:

ArrayList<Myshares> fileDetails = new ReadSDCard().getSdCardFiles();
       int j=0;

        if (!fileDetails.isEmpty()) {
            for (int i = 0; i < fileDetails.size(); i++) {
              if(fileDetails.get(i).getPath()!=null){
                CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
                Log.d(Integer.toString(j), CommonUtilities.filePaths.get(j));
                j++;
              }
            }
        }

答案 1 :(得分:0)

我很难理解为什么你会有两个循环。一个循环遍历fileDetails集合并将路径添加到新集合,然后循环遍历新集合以进行日志记录。在同一循环中执行以下两个步骤:

    if (!fileDetails.isEmpty()) {

        for (int i = 0; i < fileDetails.size(); i++) {
            CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
            Log.d(Integer.toString(i), fileDetails.get(i).getPath());
        }
    }

除此之外,我无法看到如何对此进行优化,因为如果不使用fileDetails循环遍历新数组,则无法将路径添加到新数组中。该逻辑将在O(n)时间内运行

答案 2 :(得分:0)

为什么要再次使用CommonUtilities来获取文件路径?我们可以在迭代时记录同一个实例的路径

 ArrayList<Myshares> fileDetails = new ReadSDCard().getSdCardFiles();

            if (!fileDetails.isEmpty()) {

                for (int i = 0,n=fileDetails.size(); i < n; i++) {

                    CommonUtilities.filePaths.add(fileDetails.get(i).getPath());
                Log.d(Integer.toString(i),fileDetails.get(i).getPath());
                }
            }

请参阅构造:

  for (int i = 0,n=fileDetails.size(); i < n; i++)

我们可以使用它,前提是,我们确定fileDetails.size()将返回相同的结果(列表未被修改)。 这样可以避免每次调用fileDetails.size()