【问题标题】:How to create a list of File in Java?如何在 Java 中创建文件列表?
【发布时间】:2018-06-02 21:47:52
【问题描述】:

我正在尝试在 Java 中创建一个文件列表,其中每个文件都有一个 ID,我使用的是 HashMap,然后将 ArrayList 中的文件替换为 HashMap 中的文件,如下所示:

ArrayList<Object> tab = new ArrayList<>();
tab.addAll(Arrays.asList(par));//par contains files among objects 
File file = null;
HashMap<Integer, File> hm = new HashMap<>();
//loop start browsing tab for files
        file = new File(dir + fileName);                            
        hm.put(i, file);
//loop end
 for (Map.Entry<Integer, File> entry : hm.entrySet()) {
        tab.remove(entry.getKey());
        tab.add(entry.getKey(), entry.getValue());
 }

问题是它并没有取代它,只是添加它们而不是添加对象。如何以正确的方式做到这一点?

【问题讨论】:

  • 你想在这里实现什么?如果tab 最初不只保存File 对象,那么使用您创建的用于存储文件的HashMap 不是更清楚吗?这也将允许通过 id 轻松有效地访问文件。
  • @Mick 但是 ID 似乎是列表的索引,因此 Map 没有任何好处
  • 是的,目前看来是这样。但是出于某种原因,OP 决定省略代码的相关部分,因此很难说最好的解决方案是什么。必须了解原始的 tab 数据结构以及为什么需要这种杂耍。

标签: java file arraylist replace hashmap


【解决方案1】:

我猜你想将所有 File 对象从值 HashMap 移动到 ArrayList&lt;Object&gt; 到来自 HashMap 的键的索引。

接口List有一个方法List::set(int index, E element)用指定的元素替换这个列表中指定位置的元素。

List<Object> tab = new ArrayList<>();                  // I suggest you List<File>
// ...
HashMap<Integer, File> hm = new HashMap<>();
// ...      
hm.entrySet().stream().forEach(entry -> tab.set(entry.getKey(), entry.getValue()));

【讨论】:

    【解决方案2】:

    如果你想替换列表元素,不要删除任何东西,而是使用

    tab.set(entry.getKey(), entry.getValue());
    

    另外,我想你想要ArrayList&lt;File&gt; tab

    【讨论】:

      猜你喜欢
      • 2015-02-27
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2011-08-03
      • 2012-06-13
      • 1970-01-01
      相关资源
      最近更新 更多