【问题标题】:How can I split an ArrayList into two new ArrayLists?如何将 ArrayList 拆分为两个新的 ArrayList?
【发布时间】:2016-10-05 13:51:01
【问题描述】:

我在ArrayList 上有这样的数据:13-ITEM,14-ITEM,15-ITEMGROUP(用连字符 (-) 作为分隔符)。
我想将此列表拆分为两个新的ArrayLists

  • ArrayList-1 包含 id:[13,14,15..]
  • ArrayList-2 包含字符串:[ITEM,ITEM,ITEMGROUP...]

我是 Java 新手。提前致谢。

【问题讨论】:

  • 使用 - 拆分它并将两个索引值添加到不同的数组列表中
  • 如果您的情况可能,请尝试使用 Map 而不是 List。 Number 是键,String 是 vaule。

标签: java list arraylist collections split


【解决方案1】:

您可以使用String#indexOf(char)在分隔符的String中找到索引,然后使用String#substring提取子字符串,如下:

List<String> list = Arrays.asList("13-ITEM","14-ITEM","15-ITEMGROUP");
List<String> list1 = new ArrayList<>(list.size());
List<String> list2 = new ArrayList<>(list.size());
for (String s : list) {
    int index = s.indexOf('-');
    // Add what we have before the separator in list1
    list1.add(s.substring(0, index));
    // Add what we have after the separator in list2
    list2.add(s.substring(index + 1));
}
System.out.printf("List 1 = %s, List 2 = %s%n", list1, list2);

输出:

List 1 = [13, 14, 15], List 2 = [ITEM, ITEM, ITEMGROUP]

【讨论】:

  • 谢谢它帮助很大
【解决方案2】:

拆分每个条目并将部分添加到不同的列表中。如果文本包含更多-s,则使用子字符串。

ArrayList<String> input = ...
List<String> output1 = new ArrayList<>(input.size());
List<String> output2 = new ArrayList<>(input.size());

for(String item:input){
  String[] splitted = item.split("-");
  output1.add(splitted[0]);
  output2.add(splitted[1]);
}

【讨论】:

    【解决方案3】:

    您可以使用以下代码

    List<String> list = Arrays.asList("13-ITEM", "14-ITEM", "15-ITEMGROUP");
    list.stream().map(p -> p.substring(0, p.indexOf('-'))).forEach(System.out::println);
    list.stream().map(p -> p.substring(p.indexOf('-') + 1)).forEach(System.out::println);
    

    如果您像这样拆分您的关注点(每个列表使用不同的逻辑创建),您将有可能进一步封装代码。例如,您可以添加一些异常处理。

    private static Function<String, String> getFunction() {
        return new Function<String, String>() {
            @Override
            public String apply(String p) {
                return p.substring(0, p.indexOf('-'));
            }
        };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-17
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-13
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多