我有两个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)
如果有人能帮助我,我会非常感激。
假设您的两个输入列表总是相同,您可以执行以下操作:
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);
}
使用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);