Map<Tag, List<String>> tagPersonListMap = new HashMap<>();
for (Person person: personList) {
List<Tag> tags = person.getTags();
String id = person.getId();
for(Tag tag: tags) {
tagPersonListMap.computeIfAbsent(tag, k ->new ArrayList<>()).add(id);
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class Scratch {
public static void main(String[] args) {
Person person1 = new Person(Arrays.asList(Tag.EMPLOYEE, Tag.UNKNOWN), "123");
Person person2 = new Person(Arrays.asList(Tag.UNKNOWN, Tag.VISITOR), "345");
Person person3 = new Person(Arrays.asList(Tag.VISITOR), "678");
Person person4 = new Person(Arrays.asList(Tag.EMPLOYEE, Tag.UNKNOWN), "910");
List<Person> personList = Arrays.asList(
person1, person2,
person3, person4
);
Map<Tag, List<String>> tagPersonListMap = new HashMap<>();
for (Person person: personList) {
List<Tag> tags = person.getTags();
String id = person.getId();
for(Tag tag: tags) {
tagPersonListMap.computeIfAbsent(tag, k ->new ArrayList<>()).add(id);
}
}
System.out.println("Final result: " + tagPersonListMap);
}
}
enum Tag {
EMPLOYEE("employee"),
VISITOR("visitor"),
UNKNOWN("unknown");
private final String mValue;
private Tag(String value) {
this.mValue = value;
}
}
class Person {
List<Tag> tags;
String id;
Person (List<Tag> tag, String i) {
tags = tag;
id = i;
}
List<Tag> getTags() {
return tags;
}
String getId() {
return id;
}
}
预期产出
Final result: {EMPLOYEE=[123, 910], UNKNOWN=[123, 345, 910], VISITOR=[345, 678]}
你可以这样做。为了实现这一点,我基本上将标记列表和id转换为(tag tag,String id)
的map.entry
对象。所以如果有四个标签和一个Id,那就是四个条目。然后,我简单地按标记
将它们分组,其值为列表
。
Map<Tag, List<String>> result = personList.stream()
.flatMap(per -> per.getTags().stream()
.map(tag -> Map.entry(tag, per.getId())))
.collect(Collectors.groupingBy(Entry::getKey,
Collectors.mapping(Entry::getValue,
Collectors.toList())));
result.entrySet().forEach(System.out::println);
印刷品
UNKNOWN=[123, 345, 910]
EMPLOYEE=[123, 910]
VISITOR=[345, 678]
做了这件事,我仍然会坚持你所拥有的。有时,使用溪流就像用大锤钉钉子。
问题内容: 我正在尝试对字符串列( 包含数字 )进行排序。 您会看到Mysql的自然排序算法放在后面( 对于大多数应用程序来说都可以 ),但是我有独特的需求,因此我希望结果应该像这样排序。 仅使用SQL 是否可能,或者我必须在应用程序级别操纵结果集? 问题答案: 继续 假设 它始终为WORD_space_NUMBER,这应该可行: 使用POSITION查找空间,使用SUBSTRING捕获其后的数字
我有一个字符串数组,中间有一个空白。我想根据空白之前的第一个子字符串对内容进行排序,然后根据空白之后的子字符串对内容进行排序。 例如,如果我的数组如下所示:,那么最后我需要。 我尝试在下面实现一个新的比较器: 但是我得到了这个错误: MyClass。java:7:错误:找不到合适的排序方法(字符串[], 这个错误听起来像是集合框架不支持排序字符串,这没有多大意义。
示例: 我们的名单上有5个名字:凯文、汉斯、弗里茨、汉·索罗、彼得 我现在想要所有在顶部包含“han”的名字。 因此排序后的列表如下所示: Hans,Han Solo,Kevin,Fritz,Peter 到目前为止我所尝试的: 什么都没有,因为我没有线索,但我已经谷歌了,没有找到任何东西。 从列表中删除/添加项目不是一个选项,因为我正在使用(ControlsFX组件)中的列表,其中每个项目都具有会
问题内容: 我有一个具有以下格式的字符串列表: …,我想根据零件的字母顺序对列表进行排序。我将如何去做呢? 问题答案: 要更改排序键,使用的参数: 与以下方法相同: 请注意,如问题中所述,这将是字母排序,因此对于2位数字的组件,它不会将它们解释为数字,例如,“ 11”将出现在“ 2”之前。
两行的一个例子是:([a,b,c],d)和([d,e],a)我想把这些行转换成([a,b,c],[d,e])和([d,e],[a,b,c]) dataframe的列名是“src”和“dst”。 我如何处理这个问题?
我有“MainClass”类的对象列表,它包含“Question”类的对象列表,它包含Option类的对象列表。如何按“Id”对“MainClass”类列表进行排序,以及按“Id”对“Option”类列表进行排序? 假设,