我有两个列表,一个列表为String类型,另一个列表为Resp(模型类)。我想通过与第一个列表进行比较来对Resp进行排序,例如字符串列表包含以下内容:“ abc”,“ iis”,“ kjkk”然后在Resp list中保持相同的顺序。类型的Resp列表:
data class Resp(
val first: String,
@SerializedName("firstname")
val number: Int,
@SerializedName("number")
})
因此要使用Resp.first进行排序
我正在尝试的是:
resp.sortedWith(Comparator{s1,s2-> s1.first.compareTo(staticlist.indexOf(s2.bUName))})
但是这里的问题是我无法获得s1.first的索引。
因此,请提出任何建议以解决此问题
我将尝试用java回答。我假设第一个列表是考虑Resp对象列表顺序的标准。首先,我们需要将第一个列表映射为字符串(作为键)和Integer(作为订单值)的映射。当然,由于这是订购的标准,因此每个字符串的值必须唯一:
List<String> orderRaw = new LinkedList<>();
List<Resp> resps = new ArrayList<>();
Map<String, Integer> order = new HashMap<>();
for (int i = 0; i < orderRaw.size(); i++) {
String s = orderRaw.get(i);
order.put(s, i);
}
然后,您可以像这样对Resp对象的列表进行排序:
List<Resp> resps = new ArrayList<>();
resps.sort((o1, o2) -> {
final Integer i1 = order.get(o1);
final Integer i2 = order.get(o2);
if (Objects.equals(i1, i2)) { //either both null or have the same index
return 0;
} else if (i1 == null) { //only i1 is null
return -1;
} else if (i2 == null) { //only i2 is null
return 1;
} else {
return i1 - i2;
}
});
希望它能为您提供想法。
最简单的解决方案是按照迭代strList
所收集的顺序重建Resp元素的列表。如果respList
中没有副本,它将不属于结果列表。
val strList = listOf("abc", "iis", "kjkk") // desired order
val respList = listOf(Resp("iis"), Resp("kjkk"), Resp("abc")) // unsorted
val result = strList.mapNotNull { str ->
respList.firstOrNull {
it.first == str
}
}
结果:
[Resp(first = abc),Resp(first = iis),Resp(first = kjkk)]