java 根据对象的boolean字段对集合进行排序

需求大概如下: 把boolean为true的排序到前面,false排序到后面

排序后, boolean为true的会在前面, 为false的会在后面 ,

isHasMaterial 为boolean类型

@Data
@Builder
public class MoguPoiBaseInfo {
    /**
     * 是否有素材,默认false代表没素材,为true代表有素材
     */
    private boolean hasMaterial = false;
}

public void sortByMoguPoiBaseInfo(List<MoguPoiBaseInfo> doSortList) {
        if (CollectionUtils.isEmpty(doSortList)) {
            return;
        }
        //重写Comparator()方法
        doSortList.sort((o1, o2) -> {
            //得到要比较的两个对象的某个字段,这里是required
            boolean o1HasMaterial = o1.isHasMaterial();
            boolean o2HasMaterial = o2.isHasMaterial();
            //两个值进行位运算,值不同为1,为true,参与运算
            //值相同为0,为false,不参与运算
            if (o1HasMaterial ^ o2HasMaterial) {
                return o1HasMaterial ? -1 : 1;
            } else {
                return 0;
            }
        });
    }

单测

@Test
    public void sortByMoguPoiBaseInfo() {
        List<MoguPoiBaseInfo> doSortList = new ArrayList<>();
        MoguVideoSyntheticActionImpl moguVideoSyntheticAction = new MoguVideoSyntheticActionImpl();
        moguVideoSyntheticAction.sortByMoguPoiBaseInfo(doSortList);
        System.out.println("JSON.toJSONString(doSortList) = " + JSON.toJSONString(doSortList));

        moguVideoSyntheticAction.sortByMoguPoiBaseInfo(null);
        System.out.println("JSON.toJSONString(doSortList) 2222= ");

        ;
        doSortList.add(MoguPoiBaseInfo.builder()
                               .hasMaterial(false)
                               .poiId(1L)
                               .build());
        doSortList.add(MoguPoiBaseInfo.builder()
                               .hasMaterial(true)
                               .poiId(2L)
                               .build());
        doSortList.add(MoguPoiBaseInfo.builder()
                               .hasMaterial(false)
                               .poiId(3L)
                               .build());

        moguVideoSyntheticAction.sortByMoguPoiBaseInfo(doSortList);
        System.out.println("JSON.toJSONString(doSortList) = " + JSON.toJSONString(doSortList));

    }