按确定对象的总和进行流分组
Stream grouping by sum of determinate objects
我有一个这样的请求 class :
public class Request
{
String name,destName;
int nSeats;
//Example : requestOne,Paris,3
...
}
我想将请求分组到一个 Map |Integer,List of String| 中其中键是具有相同 destName 的请求的总和,值是目的地的名称。
这是我的代码:
public TreeMap<Integer, List<String>> destinationsPerNSeats() {
return requests.
stream().
collect(Collectors.groupingBy(Request::getnSeats, TreeMap::new,
Collectors.mapping(Request::getDestName, Collectors.toList()))).
}
输入:
TreeMap<Integer, List<String>> map = mgr.destinationsPerNSeats();
print(map);
输出:{4=[巴黎],3=[伦敦,柏林,柏林],2=[巴黎]}
预期输出:{6=[柏林、巴黎]、3=[伦敦]}
我该如何解决这个问题?谢谢!
我认为您需要两条 Stream
管道。第一个将目的地分组并对每个目的地名称的座位总数求和,第二个将目的地名称按座位数分组:
public TreeMap<Integer, List<String>> destinationsPerNSeats() {
return
requests.stream()
.collect(Collectors.groupingBy(Request::getDestName,
Collectors.summingInt(Request::getnSeats)))
.entrySet()
.stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
TreeMap::new,
Collectors.mapping(Map.Entry::getKey,Collectors.toList())));
}
正在使用以下输入测试您的代码:
List<Request> requests = new ArrayList<> ();
requests.add (new Request("John","Paris",4));
requests.add (new Request("Ben","London",3));
requests.add (new Request("Dan","Berlin",3));
requests.add (new Request("Sara","Berlin",3));
requests.add (new Request("Jenn","Paris",2));
产生 Map
:
{3=[London], 6=[Berlin, Paris]}
我有一个这样的请求 class :
public class Request
{
String name,destName;
int nSeats;
//Example : requestOne,Paris,3
...
}
我想将请求分组到一个 Map |Integer,List of String| 中其中键是具有相同 destName 的请求的总和,值是目的地的名称。
这是我的代码:
public TreeMap<Integer, List<String>> destinationsPerNSeats() {
return requests.
stream().
collect(Collectors.groupingBy(Request::getnSeats, TreeMap::new,
Collectors.mapping(Request::getDestName, Collectors.toList()))).
}
输入:
TreeMap<Integer, List<String>> map = mgr.destinationsPerNSeats();
print(map);
输出:{4=[巴黎],3=[伦敦,柏林,柏林],2=[巴黎]}
预期输出:{6=[柏林、巴黎]、3=[伦敦]}
我该如何解决这个问题?谢谢!
我认为您需要两条 Stream
管道。第一个将目的地分组并对每个目的地名称的座位总数求和,第二个将目的地名称按座位数分组:
public TreeMap<Integer, List<String>> destinationsPerNSeats() {
return
requests.stream()
.collect(Collectors.groupingBy(Request::getDestName,
Collectors.summingInt(Request::getnSeats)))
.entrySet()
.stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
TreeMap::new,
Collectors.mapping(Map.Entry::getKey,Collectors.toList())));
}
正在使用以下输入测试您的代码:
List<Request> requests = new ArrayList<> ();
requests.add (new Request("John","Paris",4));
requests.add (new Request("Ben","London",3));
requests.add (new Request("Dan","Berlin",3));
requests.add (new Request("Sara","Berlin",3));
requests.add (new Request("Jenn","Paris",2));
产生 Map
:
{3=[London], 6=[Berlin, Paris]}