我有一个数组列表,其中包含来自我表的数据。我想创建另一个只包含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));
}
答案 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]