在2个集合中查找具有相同值的元素的最有效方法

时间:2018-02-09 15:18:30

标签: java

假设我有酒店列表,

Hotel {
  String name;
  String address;
}

和地址列表

Address{
  int id;
  String street;
}

查找酒店列表中所有酒店的地址等于地址列表中任何地址的街道的最有效方法是什么? 通过将每个酒店与每个地址进行比较,时间复杂度为o(n ^ 2),这看起来并不好。

感谢。

2 个答案:

答案 0 :(得分:0)

您希望将地址存储在一个集合中。

Set<String> streets = addressList.stream()
    .map(address -> address.street)
    .collect(Collectors.toSet());
Collection<Hotel> filtered = hotels.stream()
    .filter(hotel -> streets.contains(hotel.address))
    .collect(Collectors.toList());

答案 1 :(得分:0)

Map<String, List<Address> groupByResult = 
     addressList.stream().collect(Collectors.groupingBy(Address::getStreet)

然后只使用地址集合进行查找,这将很快。