gpt4 book ai didi

java - 如何交换数组列表中具有相同值的两个对象的位置

转载 作者:行者123 更新时间:2023-12-02 09:30:04 36 4
gpt4 key购买 nike

List<MyObject> list = new ArrayList<>()我想交换字段名称中具有相同值的两个(始终)对象的位置。

public class SiteDTO {
private Long id;
private String name;

// getters setters constructors

}

我知道最好的方法是使用 Collections.swap(list, 1, 2);其中 1 和 2 是要交换的对象的位置。

但是如何找到这些索引呢?

最佳答案

您可以迭代列表的索引并找到那些相等的组,然后交换恰好具有两个元素的组的位置:

List<SiteDTO> sites = Arrays.asList(new SiteDTO(1L, "1"), new SiteDTO(2L, "2"), new SiteDTO(3L, "1"));
Map<String, List<Integer>> groups = IntStream.range(0, sites.size()).boxed().collect(groupingBy(o -> sites.get(o).getName()));

for (List<Integer> positions : groups.values()) {

if (positions.size() == 2)
Collections.swap(sites, positions.get(0), positions.get(1));

}

System.out.println(sites);

输出

[SiteDTO{id=3, name='1'}, SiteDTO{id=2, name='2'}, SiteDTO{id=1, name='1'}]

注意:这适用于您有多个要交换的组的情况。

关于java - 如何交换数组列表中具有相同值的两个对象的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58062471/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com