创建另一个仅包含来自另一个ArrayList的值的ArrayList

时间:2017-04-04 21:44:40

标签: java list arraylist

我有一个数组列表,其中包含来自我表的数据。我想创建另一个只包含0到23之间整数的数组列表。数据有字符串,负数。如果有人能举例说明它会很棒。

 int col = 2; 
 List values = new ArrayList(table.getRowCount());

 for (int row = 0; row < table.getRowCount(); row++) {
  values.add(table.getValueAt(row, col));
  }

4 个答案:

答案 0 :(得分:1)

您可以执行以下操作 -
1.检查它是否是字符串。如果是,则尝试解析字符串,如果成功并且在0到23之间,则添加到新列表。
2.检查它是否是整数。如果是,则检查它是否在0到23之间,然后添加到新列表。

List<Object> inputList; // List containing all kinds of objects
List<Integer> newList = new ArrayList<>();

for (Object o: inputList) {
     if (o instanceof String) {
        String s = (String) o;
        try {
            int n = Integer.parseInt(s)
            if (n >= 0 && n <= 23) {
               newList.add(n);
            }
        } catch (NumberFormatException e) {
         System.out.println(s + " is not an integer");
        }
     }
     else if (o instanceof Integer) {
        int n = (Integer)o;
        if (n >= 0 && n <= 23) {
           newList.add(n);
        }
     }
}

答案 1 :(得分:1)

鉴于原始列表是字符串List<String> originalList = new ArrayList<>();的列表,解决方案将是:

Java8

List<Integer> filteredList = originalList
            .stream()
            .filter(s -> s.matches("-?[0-9]+")) // filter only strings which contain numbers
            .map(Integer::parseInt) // convert them to integers
            .filter(v -> v >= 0 && v <= 23) // check if it fits the range
            .collect(Collectors.toList());

Java 7

for (String s: originalList) {
    if (s.matches("-?[0-9]+")) {
        int n = Integer.parseInt(s);
        if (n >= 0 && n <= 23) {
            filteredList.add(n);
        }
    }
}

示例输出:

  

原始列表:[ - 10,-9,str,str,str,-5,-4,str,str,-1,0,1,2,str,str,str,str,7,str, 9]

     

过滤清单:[0,1,2,7,9]

答案 2 :(得分:0)

所以你只是将一个列表中的一些项目复制到另一个列表中,我假设它们是按顺序排列的。

    //Consider you have this list already
    List<Object> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9,10));

    //This is the new list you want to create
    List<Object> newList = new ArrayList<>();

    int i = 0, count = 5;
    for(Object o : list){
        if(i++ == count) {
            break;
        }
        newList.add(o);
    }
    System.out.println(newList);

输出:newList:[1,2,3,4,5]

答案 3 :(得分:0)

List<Object> tableValues = new ArrayList<>(Arrays.asList(
            new Long(100), new ArrayList(), 3, -6, 20, new Float(1.232), 4));
List<Integer> newValues = new ArrayList<>();

for (Object o : tableValues) {
    if (o instanceof Integer) {
        if ((Integer)o >= 0 && (Integer)o <= 23) {
            newValues.add((Integer)o);
        }
    }
}

System.out.println(newValues);

输出为[3,20,4]