遍历一个集合并获取另一个集合的相同索引值
Iterate over one collection and get the same index value of another collection
我想知道在 Java 中是否有可能迭代,比方说一个列表,并且 get/set 其他列表的相同索引(int)值?
for (Response e : responseList) {
e.setPrimarySkills(requestList.get(??).getPrimarySkills());
}
由于这些问题无法通过模型映射器完成,是否有任何巧妙的方法可以做到这一点?
或者,不要使用 for-each 循环,使用带索引的 for 循环。
for (int i = 0; i < responseList.size(); ++i) {
responseList.get(i).setPrimarySkills(requestList.get(i).getPrimarySkills());
}
或者,使用一对 Iterator
s:
Iterator<Response> responseIt = responseList.iterator();
Iterator<Request> requestIt = requestList.iterator();
while (responseIt.hasNext() && requestIt.hasNext()) {
// Put responseIt.next() and requestIt.next() into variables, if you want.
responseIt.next().setPrimarySkills(requestIt.next().getPrimarySkills());
}
Iterator
s 相对于索引的优势在于 Iterator
s 对于非 RandomAccess
列表是有效的;但是,除非您的列表很大,否则它不太可能是显着(甚至是明显的)差异。
你可以用 for-each 循环来完成,通过自己维护索引,但它在处理两个列表时有点不一致:
int i = 0;
for (Response e : responseList) {
e.setPrimarySkills(requestList.get(i).getPrimarySkills());
i++;
}
您可以使用递增索引的 for 循环:
List<String> l1 = List.of("a", "b");
List<Integer> l2 = List.of(1, 2);
for(int i=0; i<l1.size(); i++) {
String s = l1.get(i);
Integer i = l2.get(i);
}
当然你应该首先确保两个列表的长度相等,以避免OutOfBounds Exception。
使用两个迭代器:
Iterator<Response> responseIt = responseList.iterator();
Iterator<Request> requestIt = requestList.iterator();
while(responseIt.hasNext() && requestIt.hasNext()) {
Response response = responseIt.next();
Request request = requestIt.next();
...
}
[因其清晰度而推荐]
使用 Guava Streams.forEachPair :
Streams.forEachPair(
requestList.stream(),
responseList.stream(),
(req, resp) -> resp.setPrimarySkills(req.getPrimarySkills())
);
我想知道在 Java 中是否有可能迭代,比方说一个列表,并且 get/set 其他列表的相同索引(int)值?
for (Response e : responseList) {
e.setPrimarySkills(requestList.get(??).getPrimarySkills());
}
由于这些问题无法通过模型映射器完成,是否有任何巧妙的方法可以做到这一点?
或者,不要使用 for-each 循环,使用带索引的 for 循环。
for (int i = 0; i < responseList.size(); ++i) {
responseList.get(i).setPrimarySkills(requestList.get(i).getPrimarySkills());
}
或者,使用一对 Iterator
s:
Iterator<Response> responseIt = responseList.iterator();
Iterator<Request> requestIt = requestList.iterator();
while (responseIt.hasNext() && requestIt.hasNext()) {
// Put responseIt.next() and requestIt.next() into variables, if you want.
responseIt.next().setPrimarySkills(requestIt.next().getPrimarySkills());
}
Iterator
s 相对于索引的优势在于 Iterator
s 对于非 RandomAccess
列表是有效的;但是,除非您的列表很大,否则它不太可能是显着(甚至是明显的)差异。
你可以用 for-each 循环来完成,通过自己维护索引,但它在处理两个列表时有点不一致:
int i = 0;
for (Response e : responseList) {
e.setPrimarySkills(requestList.get(i).getPrimarySkills());
i++;
}
您可以使用递增索引的 for 循环:
List<String> l1 = List.of("a", "b");
List<Integer> l2 = List.of(1, 2);
for(int i=0; i<l1.size(); i++) {
String s = l1.get(i);
Integer i = l2.get(i);
}
当然你应该首先确保两个列表的长度相等,以避免OutOfBounds Exception。
使用两个迭代器:
Iterator<Response> responseIt = responseList.iterator();
Iterator<Request> requestIt = requestList.iterator();
while(responseIt.hasNext() && requestIt.hasNext()) {
Response response = responseIt.next();
Request request = requestIt.next();
...
}
[因其清晰度而推荐]
使用 Guava Streams.forEachPair :
Streams.forEachPair(
requestList.stream(),
responseList.stream(),
(req, resp) -> resp.setPrimarySkills(req.getPrimarySkills())
);