gpt4 book ai didi

Java - 从 map 中的列表中检索单个值

转载 作者:行者123 更新时间:2023-11-30 01:52:57 25 4
gpt4 key购买 nike

我有一个包含 3 个条目的 TreeMap,全部来自单独的 ArrayList。

我使用以下代码:

Map<String, List<String>> mapOne = new TreeMap<String, List<String>>();
List<String> listFour = Arrays.asList("");

ArrayList<String> listOne = new ArrayList<>();
listOne.add("Writer");
listOne.add("Actor");
listOne.add("Politician");
listOne.add("Dancer");

ArrayList<String> listTwo = new ArrayList<>();
listTwo.add("James");
listTwo.add("Robert");
listTwo.add("Tereza");
listTwo.add("John");

ArrayList<String> listThree = new ArrayList<>();
listThree.add("Joyce");
listThree.add("Redford");
listThree.add("May");
listThree.add("Travolta");

for (int i = 0; i < listOne.size(); i++) {

String stringOne = listOne.get(i);
String stringTwo = listTwo.get(i);
String stringThree = listThree.get(i);

listFour = Arrays.asList(stringTwo, stringThree);

mapOne.put(stringOne, listFour);

}

现在我想从排序列表中获取各个字符串值。像这样:

for (Map.Entry<String, List<String>> entry : mapOne.entrySet()) {

String key = entry.getKey();

for (String value : entry.getValue()) {

System.out.println(value);

}
}

上面的代码打印一个列表,如

{Robert Redford , John Travolta , Tereza May , James Joyce} 

是否可以以某种方式迭代列表以获得单独的列表,一个包含名字,另一个包含姓氏?

listOne = {Robert , John , Tereza, James}
listTwo = {Redford, Travolta, May, Joyce}

或者我应该使用完全不同的方法?

整个事情始于需要对一个 ArrayList 进行排序并相应地对另一个 ArrayList 进行排序。一开始看似微不足道的事情,后来证明是一个真正的挑战。

我是一名业余程序员,所以专业人士请多多包容我。

最佳答案

不知何故,你似乎过度设计

我会回答 Stream先解决方案,只是为了尝试一下。
请注意,我个人更喜欢“旧的”迭代方法(见下文)。

// You can see by the use of AtomicInteger that this isn't the right road to take!
final AtomicInteger i = new AtomicInteger();
final Collection<List<String>> values1 =
mapOne.values()
.stream()
.flatMap(v -> v.stream())
.collect(partitioningBy(o -> i.getAndIncrement() % 2 != 0))
.values();

输出:[[Robert, John, Tereza, James], [Redford, Travolta, May, Joyce]]

<小时/>

迭代方法

final Collection<String> names = new ArrayList<>();
final Collection<String> surnames = new ArrayList<>();

for (final List<String> value : mapOne.values()) {
names.add(value.get(0));
surnames.add(value.get(1));
}

输出:

[Robert, John, Tereza, James]
[Redford, Travolta, May, Joyce]

这是安全的,因为你知道每个内心 List有两个元素。

<小时/>

JB Nizet 告诉你要做的事情(归功于他写的),基本上是创建一个合适的 class

public class Person {
private String profession;
private String name;
private String surname;

// Getters and setters. JavaBean style
}

并继续对 Collection<Person> 进行排序.
例如,尽可能保持简单

final List<Person> persons = new ArrayList<>();

// Populate list

Collections.sort(persons, (p1, p2) -> {
// Not null-safe
return p1.getName().compareTo(p2.getName());
});

这将按照 name 对列表进行排序。它不会返回一个新的List,而只是修改输入的List。

关于Java - 从 map 中的列表中检索单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444369/

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