在java中,我们可以按不同的字段对相同的对象进行分组吗?

在java中,我们可以按不同的字段对相同的对象进行分组吗?,java,Java,我想使用同一对象的不同字段之间的条件比较将单个列表分组到列表列表中 例如:假设我们在java中有下面的类 class Flight { String departureStation; String arrivalStation; } 现在我有了列表,我想让他们在列表中分组,如果航班是说,f1.arrivalStation==f2.出发站,则将他们分组到一个列表中 例如,假设我们有航班f1={departureStation=“海德拉巴”,arrivalStation=“孟买”},

我想使用同一对象的不同字段之间的条件比较将单个列表分组到列表列表中

例如:假设我们在java中有下面的类

class Flight {
   String departureStation;
   String arrivalStation;
}
现在我有了
列表
,我想让他们在
列表
中分组,如果航班是说,
f1.arrivalStation==f2.出发站
,则将他们分组到一个列表中

例如,假设我们有
航班f1={departureStation=“海德拉巴”,arrivalStation=“孟买”}
航班f2={departureStation=“孟买”,arrivalStation=“德里”}
航班f3={departureStation=“迪拜”,arrivalStation=“纽约”}
,那么最后的列表应该是这样的,
由于
(f1.arrivalStation==f2.departureStation)
这两个应归入一个
列表
,而对于
f3
,由于与给定条件不匹配,它将单独位于
列表
中。在分组时,我们应该得到长度为
2
List
,其中第一个
List
应该包含
f1和f2
,而其他列表应该只包含
f3

,我将从
List
创建一个流,并使用
.filter()
最终将其收集为一个列表。然后,你可以用这个列表做任何你想做的事情

对于例子,我们认为>航班属于类型<代码>列表F1。 .collect(Collectors.toList()); 添加(临时列表); } 通过一些动态规划,可以稍微提高效率


(我忽略了缺少的getter和setter。为了正确封装,您可能需要添加它们。)

示例实现可以如下所示:

  • 将列表元素收集到地图:键-列表元素,值-符合条件的航班列表(自身元素或出发等于到达的元素)
  • 检索值集合并对其进行筛选
  • 打印结果
List data=Arrays.asList(
新航班(“MOS”、“MAD”),
新航班(“MAD”、“BOS”),
新航班(“MAD”、“JFK”),
新航班(“JFK”、“MOS”)
);
data.stream()
.collect(收集器).toMap(x->x,
x->data.stream()
.filter(y->x.equals(y)| | y.dep().equals(x.arr())
.collect(收集器.toList()))
.values()
.stream()
.filter(e->e.size()>1)
.forEach(System.out::println);
输出:

[MAD -> JFK, JFK -> MOS]
[MOS -> MAD, JFK -> MOS]
[MOS -> MAD, MAD -> BOS, MAD -> JFK]
或者可以检索一组所有机场,然后机场可以选择航班数据-如果提到起飞或抵达:

data.stream()
.flatMap(x->Stream.of(x.dep(),x.arr())
.distinct()
.collect(收集器).toMap(x->x,
x->data.stream()
.filter(y->y.dep().equals(x)
||y.arr()等于(x))
.collect(收集器.toList())
)
.values()
.stream()
.filter(e->e.size()>1)
.forEach(System.out::println);
输出

[MOS -> MAD, JFK -> MOS]
[MOS -> MAD, MAD -> BOS, MAD -> JFK]
[MAD -> JFK, JFK -> MOS]

您需要更好地定义,这是什么类型的分组?有一些样本数据要解释吗?
for(Flight f1 : flights) {
    List<Flight> temporaryList = flights.stream()
           .filter(f2 -> f1.arrivalStation.equals(f2.departureStation))
           .collect(Collectors.toList());
    listOfLists.add(temporaryList);
}
[MAD -> JFK, JFK -> MOS]
[MOS -> MAD, JFK -> MOS]
[MOS -> MAD, MAD -> BOS, MAD -> JFK]
[MOS -> MAD, JFK -> MOS]
[MOS -> MAD, MAD -> BOS, MAD -> JFK]
[MAD -> JFK, JFK -> MOS]