【发布时间】:2015-11-22 15:24:11
【问题描述】:
Java 列表是否具有从列表中选择索引子集的方法?
例如,输入[1, 4, 5] 的列表[a, b, c, d, e, f, g] 应该输出[a, d, e]。
【问题讨论】:
-
我使用的是 java 7,但是 java 8 的方式是什么?
-
Collections 类中没有这样的方法,但是你可以通过一个简单的循环来获得它。
Java 列表是否具有从列表中选择索引子集的方法?
例如,输入[1, 4, 5] 的列表[a, b, c, d, e, f, g] 应该输出[a, d, e]。
【问题讨论】:
这在 Java 8 中非常简单,只需确保在索引上使用流,而不是在对象上,并使用.map;
public static void main(String[] args) {
List<String> stringList = Arrays.asList("a", "b", "c", "d");
List<Integer> indices = Arrays.asList(1, 3);
List<String> resultList = indices.stream()
.map(i -> stringList.get(i))
.collect(Collectors.toList());
System.out.println(resultList);
}
在 Java 7 中也没有那么难:
public static void main(String[] args) {
List<String> stringList = Arrays.asList("a", "b", "c", "d");
List<Integer> indices = Arrays.asList(1, 3);
List<String> resultList = new ArrayList<>();
for(int i : indices) {
resultList.add(stringList.get(i));
}
System.out.println(resultList);
}
在这两种情况下,输出都是:
[b, d]
【讨论】:
使用LinkedHashMap 仅使用一个循环,因为在 Collection 类中没有这种特殊的方法来获取列表的子集(index-wise)。 p>
代码:
public static void main(String[] args) {
List<Character> ls = new ArrayList<Character>();
ls.add('a');
ls.add('b');
ls.add('c');
ls.add('d');
ls.add('e');
ls.add('f');
ls.add('g');
//EDIT
int subIndex[] = new int[] { 1, 4, 5 };
Map<Integer, Character> result = new LinkedHashMap<>();
for (int i = 0; i < subIndex.length; i++) {
result.put(i, ls.get(subIndex[i] - 1));
}
System.out.println(result.values());
}
输出:
[a, d, e]
我希望这会有所帮助。
【讨论】:
ade,而不是[a, d, e]