我有一个单元测试来检查排序结果列表的顺序。
奇怪的是,测试总是在 intellij
中通过,但当我从控制台运行时总是失败 ./gradlew
是否transform
或其他方法会根据环境的不同而发挥不同的作用?
public List<Image> sortImages(List<Image> inputImages, UserInfo userInfo) {
if (inputImages == null) {
return null;
}
List<ImageScore> imageScoreList = createImageScoreListFromImageList(inputImages);
Collections.sort(imageScoreList, imageScoreDescComparator);
imageScoreList = getSubListIfListIsTooLong(userInfo, imageScoreList);
List<Image> sortedImages = transformImageScoreListToImageList(imageScoreList);
return sortedImages;
}
private List<ImageScore> getSubListIfListIsTooLong(UserInfo userInfo, List<ImageScore> imageScoreList) {
if (userInfo != null && userInfo.channel != null && userInfo.channel.equals(UserInfo.UserChannel.CLIENT)) {
if (imageScoreList.size() > VenueConfig.s.MAX_IMAGES_TO_RETURN_TO_CLIENT) {
imageScoreList = imageScoreList.subList(0, VenueConfig.s.MAX_IMAGES_TO_RETURN_TO_CLIENT);
}
}
return imageScoreList;
}
private List<Image> transformImageScoreListToImageList(List<ImageScore> imageScoreList) {
Collection result = Collections2.transform(imageScoreList, new Function<ImageScore, Image>() {
@Override
public Image apply(ImageScore input) {
return input.image;
}
});
return new ArrayList(result);
}
private List<ImageScore> createImageScoreListFromImageList(List<Image> inputImages) {
Collection result = Collections2.transform(inputImages, new Function<Image, ImageScore>() {
@Override
public ImageScore apply(Image input) {
ImageScore imageScore = new ImageScore(input);
imageScore.score = imageScoreCalculator.getScoreForImage(input);
return imageScore;
}
});
return new ArrayList(result);
}
更新:
我执行以下逻辑:
1) 将 Image
转换为 ImageScore
(使用元素 {int Score, Image image}
)
这也设定了分数
2)然后我根据分数排序
3) 然后我将 ImageScore
重新转换为 Image
我怎样才能以不同的方式做到这一点?作为计算分数的排序中继?
最佳答案
是的,很可能就是这样。
transform
返回一个Collection
(根据定义,该集合未排序),并且在其文档中不提供有关排序的保证。
它似乎总是排序的,但这取决于实现,您不应该依赖任何东西。
如果您的元素有逻辑顺序,您可以尝试以下操作:
Collections.sort(result);
return new ArrayList(result);
否则,您可以使用某种辅助函数来测试两个列表的等价性,而无需注意顺序。
关于java - java的lists.transform可以改变列表顺序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25990014/