我正試圖使用流和lambdas將多個集合減少爲單個集合。不過,我需要指出發生重複點擊的位置。如何將多個列表與流和lambas結合,指示哪裏有重複
基本上我有以下情況:客戶的
系列1(人人)員工的前景
的Person 1 (Tom)
Person 2 (Bob)
Person 3 (Joe)
系列2
Person 1 (Mike)
Person 2 (Wilbur)
Person 3 (Joe)
收集3
Person 1 (Mike)
Person 2 (Tony)
Person 3 (Sue)
Person 4 (Joe)
我想改變這個集合,包括一個新的領域,我可以使用地圖做的 - 我在哪裏迷路實際上是如何將其壓平,這樣最終的結果會是這樣的
收集
Person 1 (Tom, "Customer")
Person 2 (Bob, "Customer")
Person 3 (Joe, "Customer, Prospect, Employee")
Person 4 (Mike, "Prospect, Employee")
Person 5 (Wilbur, "Prospect")
Person 6 (Tony, "Employee")
Person 7 (Sue, "Employee")
我只是計劃創建一個字符串值來表示它們屬於哪個區域。
謝謝!
[編輯]
基於下面的建議下,我能夠這樣測出來的解決方案......
類TestOutFlatMap { 公共無效測試(){
Map<String, Collection<Person>> map = new HashMap<>();
Collection<Person> p1 = new ArrayList<>();
p1.add(new Person("Mike"));
p1.add(new Person("Joe"));
p1.add(new Person("Tony"));
Collection<Person> p2 = new ArrayList<>();
p1.add(new Person("Wilbur"));
p1.add(new Person("Joe"));
p1.add(new Person("Molly"));
Collection<Person> p3 = new ArrayList<>();
p1.add(new Person("Wilbur"));
p1.add(new Person("Joe"));
p1.add(new Person("Bubba"));
map.put("Customer", p1);
map.put("Prospect", p2);
map.put("Employee", p3);
Map<Person, String> output = map
.entrySet()
.stream()
.flatMap(t -> t.getValue().stream().map(g -> new Pair<>(t.getKey(), g)))
.collect(Collectors.toMap(t -> t.getValue(), u -> u.getKey(), (x, y) -> x + ", " + y));
output.keySet().stream().forEach(p -> {
System.out.println(p);
System.out.println(output.get(p));
});
}
class Person {
String name;
Person(String name){
this.name = name;
}
public String toString() {return this.name;}
@Override
public int hashCode() {
int hash = 5;
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Person other = (Person) obj;
if (!Objects.equals(this.name, other.name)) {
return false;
}
return true;
}
};
}
但是我的結果並不如預期。他們返回如下:
Bubba
Customer
Molly
Customer
Wilbur Customer, Customer
Tony Customer
Joe Customer, Customer, Customer
Mike Customer
我沒有看到它錯誤連接的地方。
感謝您的提示 - 不幸的是,這兩個給我一個編譯錯誤在收集「推理變量K有不兼容的界限」,這一「收集(收藏家」?超T,A,R>)的類型是錯誤的「 –
謝謝,@purringpigeon,我的地圖類型錯誤。我更正了我的答案 –
這很奇怪 - 當我運行第一個例子時,我得到了相同的結果...收集器反覆連接了同一個字符串... Joe「Customer,Customer,Customer」,而不是我所期待的喬,「客戶,展望,員工」。第二個例子將字符串摺疊爲只是說「客戶」。 –