Java计算队列中的唯一值

标签 java count queue unique

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 的出现,流 API:s 支持 distinct 方法。可以使用以下代码:

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 类已经实现)。

资源:

提示,如果您需要创建自己的散列,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);

关于Java计算队列中的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27740653/

相关文章:

java - 从外部方法为字段 ("global variable") 赋值

excel - 我怎样才能让它从第41行开始呢?

java - 从 Java 发送电子邮件时 SMTP 服务器挂起时的帮助

python - 将队列转储到python中的列表/数组中

sql - PostgreSQL 计算一个表中给定 id 的条目,并按另一个表中的比率将其乘以并求和

sql-server - 我应该使用内存 SQL (Hekaton) 作为队列消息传递系统吗?

java - Android WebView 中显示白屏

java - 使用 Eclipse 将 JavaHelp 系统集成到我的应用程序中时,findHelpSet 返回空 URL

java - 在 JavaFX 应用程序的 SQLite 中插入数据

matlab - 如何计算 Matlab 中 2 个数组(一个是另一个数组的一部分)中值的出现次数?