【问题标题】:How to search through hashmap and print values lower than X?如何搜索hashmap并打印低于X的值?
【发布时间】:2019-10-20 10:39:27
【问题描述】:

我有一个方法应该通过哈希图搜索并打印低于 X 的值(X 是用户输入)。

最好的方法是什么?

这是针对 Java 的。我只被允许使用 hashmap,没有别的。

编辑:

我试图通过获取键集中的值来遍历所有值,但没有打印出来。


public class price() {

HashMap<Integer, Integer> price = new HashMap<>(); //Hashmap.
price.put(1, 500);
price.put(2, 1000);
price.put(3, 1500); //etc

public void findLowerPrice(int x) {
        for (int y : price.values()) {
            if (x > y) {
                System.out.print(y + " Price: " + y);
                System.out.println("");
            }
        }
   }
}

x 是用户输入,但假设用户输入 1000。 该方法应打印键 1 和 2,以及它们各自的值 500 和 1000。

【问题讨论】:

  • 你试过什么?分享一些代码,所以不是自助编码网站;)
  • 用我试过的方法编辑。
  • 请阅读minimal reproducible example 并相应地增强您的问题。您显示的代码并不理想,但它应该可以完成这项工作。所以:包括您的示例数据。正如minimal reproducible example...
  • 您可以使用price.values() 代替price.keySet()。在 java 8 中你可以使用forEach 和消费者
  • 它没有打印任何东西,因为你没有打电话给findLowerPrice。如果你是,那么你应该阅读How to create a Minimal, Reproducible Example,这样我们就可以确切地看到你正在做什么以获得你声称拥有的结果,因为代码看起来可以正常工作。

标签: java


【解决方案1】:

使用 Java 8 流:

prices.entrySet()
  .stream()
  .filter(entry -> entry.getKey() < x)
  .forEach(entry -> System.out.printf("%d price: %d\n", entry.getKey(), entry.getValue());

【讨论】:

  • Java 流在我看来不是初学者材料。幕后发生的事情太多(包括泛型)。
【解决方案2】:

如果你想在键中找到最低的,map.keySet() 可以用来获取所有的键,只需遍历它们并找到最低的。

如果您想在这些值中找到最小值,则可以使用map.values() 获取所有值并遍历它们并找到最小值将解决您的问题。

你所做的对我来说似乎很好。可能没有低于x的值。

您可以通过将int y 更改为Integer y 来避免for 循环中的自动装箱(虽然这里不相关但这是一件好事)然后最好使用Integer.compareTo() 而不是@987654330 @

另一个小的改进是您可以使用一个System.out.println 而不是两个。

HTH。

【讨论】:

  • 这些值是预先确定的,所以我已经知道哈希图中存在什么。它应该打印出多个值,而不仅仅是一个。我需要能够打印出所有低于 X 的值,但它没有这样做。
  • 你能粘贴你的完整代码而不是sn-p。这会很有帮助
  • 已编辑。让我知道它是否有帮助。
  • 我仍然看到代码不完整,因为地图没有初始化,我不知道x的值
  • 再次编辑。 X 的值由用户输入决定,但我举了一个例子。
【解决方案3】:
public class Price {

private static HashMap<Integer, Integer> priceMap = new HashMap<>();

Price() {
    priceMap.put(1, 500);
    priceMap.put(2, 1000);
    priceMap.put(3, 1500); //etc
}

public static void main(String[] args) {
    Price price = new Price();
    price.findLowerPrice(1000);
}

public void findLowerPrice(int x) {

    List<Integer> integerList = priceMap.entrySet()
            .stream()
            .filter((entry) -> entry.getValue() < x)
            .map((entry -> entry.getKey()))
            .collect(Collectors.toList());

    System.out.print(integerList);
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多