Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于布尔值对列表进行部分排序_Java_Java 8 - Fatal编程技术网

Java 基于布尔值对列表进行部分排序

Java 基于布尔值对列表进行部分排序,java,java-8,Java,Java 8,假设我有一个对象列表,我想根据对象的某个属性是否包含特定字符串将它们划分在同一个列表中 SomeClassA someClass: String attributeA; ... (other attributes) 例如,假设我有: List<SomeClassA> someListA = (a list of SomeClassA); List someListA=(SomeClassA的列表); 我想把SomeClassA中attributeA包含“\u D

假设我有一个对象列表,我想根据对象的某个属性是否包含特定字符串将它们划分在同一个列表中

SomeClassA someClass: 
   String attributeA;
   ... (other attributes)
例如,假设我有:

List<SomeClassA> someListA = (a list of SomeClassA); 
List someListA=(SomeClassA的列表);
我想把
SomeClassA
attributeA
包含“\u DUD”的所有实例放在
attributeA
不包含字符串的所有实例之后

一种选择: 我知道我们可以在列表中循环,根据条件是否为真(包含“_DUD”)创建并添加到两个列表中,然后在第一个列表后添加第二个列表,但是有没有办法不创建这些中间列表

我宁愿不做完整的排序,因为顺序并不重要。我们只需要将所有包含_DUD属性的实例放在一起

(当然,这是一个替换名称的简化示例,但我希望它能够满足总体需求)


谢谢

我建议使用以下算法:

  • 从列表开始查找包含“\u DUD”的下一个元素
  • 从列表末尾查找不包含“\u DUD”的下一个元素
  • 交换元素
  • 重复一遍,直到你们见面

您可以使用评论中建议的比较器;我还使用了一些其他的方法:

newList = "A_DUD", "B_DUD", "nope", "nope2", "C_DUD", "D_DUD", "nope3"


for (int i = list.size() - 1; i > 0; --i) {

        if (!newList.get(i).contains("_DUD") && !newList.get(i - 1).contains("_DUD")) {
            int j = i - 1;
            do {
                --j;
            } while (j >= 0 && !newList.get(j).contains("_DUD"));

            if (j < 0) {
                break;
            }

            Collections.swap(newList, j, j + 1);
            ++i;
        }

        else if (!newList.get(i).contains("_DUD") && newList.get(i - 1).contains("_DUD")) {
            Collections.swap(newList, i, i - 1);
        }
    }
newList=“A_DUD”、“B_DUD”、“nope”、“nope2”、“C_DUD”、“D_DUD”、“nope3”
对于(int i=list.size()-1;i>0;--i){
如果(!newList.get(i).contains(“\u DUD”)&&(!newList.get(i-1).contains(\u DUD”)){
int j=i-1;
做{
--j;
}而(j>=0&&!newList.get(j).contains(“_DUD”);
if(j<0){
打破
}
集合交换(newList,j,j+1);
++一,;
}
else如果(!newList.get(i).contains('u DUD')&&newList.get(i-1).contains('u DUD')){
集合交换(新列表,i,i-1);
}
}
somListA.sort(Comparator.comparing(x->x.attributeA.endsWith(“\u DUD”)).reversed())