这是我的代码:
synchronize
目标是将两个 List<UserModel> reversed = Lists.reverse(Arrays.asList(new UserModel("userId1"), new UserModel("userId2"), new UserModel("userId3"), new UserModel("userId4"));
List<UserPairModel> result = nwe LinkedList<>();
IntStream.range(0, reversed.size())
.filter(idx -> idx % 2 == 0)
.forEach(idx -> {
UserModel userModel1 = null;
UserModel userModel2 = null;
try {
userModel1 = reversed.get(idx - 1);
} catch (Exception e) {
// do nothing
}
try {
userModel2 = reversed.get(idx);
} catch (Exception e) {
// do nothing
}
result.add(UserPairModel.from(userModel1, userModel2));
}
);
return Lists.reverse(result);
}
配对到一个UserModel
源列表中,UserPairModel
可以包含零个,一个或多个元素。
如果源列表不包含任何元素:输出将是一个reversed
列表,其中一个result
由UserPairModel
如果源列表仅包含一个元素,则类似地,UserPairModel.from(null, null)
列表将包含一个result
,其构建方式为UserPairModel
,实际上,这里实现了将任何对象配对UserPairModel.from(notNull, null)
的数量乘以2。
此代码的问题,给定四(4)个元素( userId1,userId2,userId3,userId4 ),只有最后3个元素存储在UserModel
列表中,即2,3和4,跳过第一个元素。
答案 0 :(得分:1)
IntStream.range(0, reversed.size())
.filter(idx -> idx % 2 == 0)
.forEach(idx -> {
UserModel userModel1 = reversed.get(idx);
UserModel userModel2 = idx + 1 < reversed.size() ? reversed.get(idx + 1) : null;
result.add(UserPairModel.from(userModel1, userModel2));
});
或者以更具可读性的形式出现:
for (int idx = 0; idx < reversed.size(); idx += 2) {
UserModel userModel1 = reversed.get(idx);
UserModel userModel2 = idx + 1 < reversed.size() ? reversed.get(idx + 1) : null;
result.add(UserPairModel.from(userModel1, userModel2));
}