int uniqueCount = 0;
System.out.println("List Cities Visited:");

for(int i = 0; i < num; i++)
{
    System.out.println((i+1)+". "+(String)cityTrack.dequeue());

}

System.out.println("Unique Cities: "+uniqueCount);


基本上,我将城市列表添加到队列中。我要如上所述打印出来,并计算有多少个独特的城市。有任何想法吗?我对此很陌生。

编辑:解决。谢谢你们!

最佳答案

Java 8附带了支持distinct方法的流API:s。可以使用以下代码:

Collection<String> cities = new ArrayDeque<>();
cities.add("Detroit");
cities.add("NYC");
cities.add("Boston");
cities.add("Boston");

// Count the number of unique cities
final long uniqueCities = cities.stream().distinct().count();

// Prints all of the cities (including duplicates) and removes them from the
// queue (i.e. performs a dequeue) which is the same way as you showed in the example
IntStream.rangeClosed(1, cities.size())
        .forEach(i -> System.out.println(i + ". " + cities.remove()));

// Prints the unique cities counter
System.out.println("Unique: " + uniqueCities); // -> Unique: 3


distinct方法要求正确地实现hashCode方法(对于String类已经存在)。

资源:


Learn more about streams
Learn more about hashCode


提示,如果需要创建自己的哈希,则Objects.hash方法可以正常工作。您只需传递应该属于hashCode的args。

public int hashCode() {
    return Objects.hash(attr1, attr2, attr3);
}


另外,请注意,通过使用remove方法(与示例中的dequeue相同),可将元素从队列中删除。如果这不是故意的,那么使用计数器进行简单循环就可以了,就像下面的示例所示:

AtomicInteger counter = new AtomicInteger(0);
cities.stream()
        .map(city -> counter.incrementAndGet() + ". " + city)
        .forEach(System.out::println);

10-07 17:10