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())代码>