java lists.transform是否可以更改列表顺序?

java lists.transform是否可以更改列表顺序?,java,list,intellij-idea,transform,Java,List,Intellij Idea,Transform,我有一个单元测试,它检查排序结果列表的顺序 奇怪的是,测试总是通过intellij,但当我从控制台/gradlew运行时总是失败 是否可能是转换或其他方法根据环境的不同而工作不同 public List<Image> sortImages(List<Image> inputImages, UserInfo userInfo) { if (inputImages == null) { return null; } List<Im

我有一个单元测试,它检查排序结果列表的顺序

奇怪的是,测试总是通过
intellij
,但当我从控制台
/gradlew
运行时总是失败

是否可能是
转换
或其他方法根据环境的不同而工作不同

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);
}
公共列表排序(列表输入图像、用户信息用户信息){
if(inputImages==null){
返回null;
}
List imageScoreList=createImageScoreListFromImageList(输入图像);
Collections.sort(imageScoreList、imageScoreDescComparator);
imageScoreList=GetSubListFlistisToLong(用户信息,imageScoreList);
List sortedImages=transformImageScoreListToImageList(imageScoreList);
返回图像;
}
私有列表GetSubListFilistitoLong(UserInfo UserInfo,List 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\u IMAGES\u TO\u RETURN\u TO\u CLIENT);
}
}
返回得分表;
}
私有列表转换ImageScoreListToImageList(列表imageScoreList){
Collection result=Collections2.transform(imageScoreList,新函数(){
@凌驾
公共图像应用(ImageScore输入){
返回input.image;
}
});
返回新的ArrayList(结果);
}
私有列表createImageScoreListFromImageList(列表输入图像){
Collection result=Collections2.transform(输入图像,新函数(){
@凌驾
公共图像分数应用(图像输入){
ImageScore ImageScore=新ImageScore(输入);
imageScore.score=imageScoreCalculator.getScoreForImage(输入);
返回图像分数;
}
});
返回新的ArrayList(结果);
}
更新:

我的逻辑如下:

1) 将
Image
转换为
ImageScore
(使用元素
{int score,Image}
) 这也决定了比分

2) 然后我根据分数排序

3) 然后我将
ImageScore
重新转换为
Image


我该如何做才能有所不同?作为计算分数的排序中继?

是的,很可能是这样

转换
返回一个
集合
(该集合未按定义排序),并且在其文档中不保证排序

它似乎总是被排序的,但这是依赖于实现的,您不应该依赖任何东西

如果元素具有逻辑顺序,可以尝试以下方法:

Collections.sort(result);
return new ArrayList(result);

否则,您可以使用某种帮助函数来测试两个列表的等效性,而不必注意顺序。

这对我来说是个问题,我执行以下逻辑:1)将
Image
转换为
ImageScore
(使用元素
{int score,Image Image}
)这也设置了分数2)我然后根据分数进行排序3)我然后将
ImageScore
重新转换为
Image
我该如何做呢?作为计算分数的排序中继?您可以尝试在测试断言中使用实用方法,测试列表是否包含相同的元素,而不考虑排序,如
CollectionUtils.isEqualCollection(…)
-link:但我想检查顺序。will Lists.transform是否保留顺序?好吧,好吧-不,就是这样,
Collections2.transform
不保证保留顺序。为什么不创建一个新的
图像
数组列表
,并自己填充它,而不是使用
集合2.transform
?在测试断言中可能最容易处理这个问题。