如果我从第一个ArrayList中删除了一个值,如何在两个ArrayList上获得相同的位置

问题描述 投票:0回答:2

我有两个ArrayLists

ArrayList<String> firstList = new ArrayList<>(Arrays.asList("king", "king", "queen", "jack", "queen"));

ArrayList<String> secondList = new ArrayList<>(Arrays.asList("one", "one", "one", "two", "one"));

在名为firstList的列表中,我将使用Set<String> hashSet = new HashSet<>(firstList);删除副本,输出将为"king", "queen", "jack"

我想要做的是让secondList上的位置等于firstList上的位置。

目前的输出是(king & one), (queen, one), (jack, one)

我想要的输出是(king, one), (queen, one), (jack, two)

如果有人能帮助我,我会非常感激。

java arraylist
2个回答
2
投票

假设您的两个输入列表总是相同,您可以执行以下操作:

public static void main(String[] args) {
    List<String> firstList  = new ArrayList<>(Arrays.asList("king", "king", "queen", "jack", "queen"));
    List<String> secondList = new ArrayList<>(Arrays.asList("one", "one", "one", "two", "one"));

    List<String> cards = new ArrayList<>();
    List<String> positions = new ArrayList<>();
    for(int i = 0; i< firstList.size(); i++){
        String temp = firstList.get(i);
        if(!cards.contains(temp)){
            cards.add(temp); 
            positions.add(secondList.get(i)); 
        }
    }
    System.out.println(cards);
    System.out.println(positions);
}

1
投票

使用Map。在Java 8中,它将是(以通过单元测试的形式):

    final List<String> one = asList("king", "king", "queen", "jack", "queen");
    final List<String> two = asList("one", "one", "one", "two", "one");

    //Guards against IndexOutOfBoundsExceptions
    final int size = Math.min(one.size(), two.size()); 
    //LinkedHashMap to preserve key ordering
    final Map<String,String> map = new LinkedHashMap<>(size);
    for(int i = 0; i < size; i++) {
        map.putIfAbsent(one.get(i), two.get(i));
    }

    final String actual = map.entrySet().stream()
            .map(e -> String.format("[%s,%s]", e.getKey(), e.getValue()))
            .collect(Collectors.joining(","));
    final String expected = "[king,one],[queen,one],[jack,two]";
    assertEquals(expected, actual);

对于Java 7,您需要在添加之前检查Map是否已包含密钥。 putIfAbsent()为你做这件事。

如果你想用它们做不同的事情,你可以随后流式传输Map值和键:

    final String keys = String.join(",", map.keySet());
    assertEquals("king,queen,jack", keys);

    final String values = String.join(",", map.values());
    assertEquals("one,one,two", values);
© www.soinside.com 2019 - 2024. All rights reserved.