我有一個單元測試,檢查排序結果列表的順序。確實java lists.transform能改變列表順序嗎?
奇怪的是,測試總是通過在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
我該如何做到這一點?作爲計算得分上的排序中繼?
在測試斷言中處理這可能是最簡單的。 – vikingsteve 2014-09-23 08:57:56