Java 如何从HashMap检索以前的值?

Java 如何从HashMap检索以前的值?,java,hashmap,Java,Hashmap,我从文本文件中读取以下代码。文本文件i如下所示: 111 Laptop 500 10 222 Mobile 120 8 333 Notebook 4 100 444 Chocolates 3 50 555 Guitar 199 5 666 LenovoLaptop 470 10 777 HPLaptop 450 10 888 SonyVAIO 525 5 如果用户以111的身份输入ID,则应输出以下内容: 111 Laptop 500 10 666 LenovoLaptop 470 10 77

我从文本文件中读取以下代码。文本文件i如下所示:

111 Laptop 500 10
222 Mobile 120 8
333 Notebook 4 100
444 Chocolates 3 50
555 Guitar 199 5
666 LenovoLaptop 470 10
777 HPLaptop 450 10
888 SonyVAIO 525 5
如果用户以
111
的身份输入
ID
,则应输出以下内容:

111 Laptop 500 10
666 LenovoLaptop 470 10
777 HPLaptop 450 10
888 SonyVAIO 525 5
我将文本文件的内容存储在HashMap中。代码如下:

public void comparableItems(String ID)
{
    File f = new File("C://Class/items.txt");
    HashMap<String, Item> map = new HashMap<String, Item>();

    try
    {
        Scanner scan = new Scanner(f);

        while(scan.hasNext())
        {
            String line = scan.nextLine();
            String temp[] = line.split(" ");

            Item it = new Item(temp[0], temp[1], Double.parseDouble(temp[2]), Integer.parseInt(temp[3]));

            map.put(it.itemID, it);
        }
        if(map.containsKey(ID))
        {
            Item item = map.get(ID);
            if(item.price>=item.price+100 && item.price<=item.price-100)
            {

            }
        }
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}
如何获得所需的输出?我正处于Java集合的学习阶段。所以请容忍我

有人能帮我吗

谢谢

对于您想要的内容(价格接近所需项目的项目),HashMap不是一个高效的数据存储


然而,因为这听起来像是你的家庭作业,一旦你使用map.get(“111”)获得你的笔记本电脑,获得价格p,然后在hashmap上迭代以获得价格在你想要的p增量内的任何项目。收藏教程告诉你如何迭代收藏。

你的
地图对你没有多大好处。因为在解析文件之前就知道要查找什么引用项ID,所以在解析过程中看到该项时(如果看到),就可以捕获该项。您确实需要某种类型的集合来保存所有其他项目,但是对于此特定任务而言,
列表将是更好的选择

在任何情况下,您的问题的重点似乎是检查您从文件中解析的所有其他项。为此,您希望迭代
映射
值()

for(Item-otherItem:map.values()){
如果((otherItem.price=item.price-100)){
otherItem.printItemDetails();
}
}

如果您在
列表
而不是
映射
中收集了项目,那么您将用
列表
(或您在
列表
中使用的任何名称)替换上面的
映射.values()

为什么输入
111会导致您提供的列表?
ID
是否不唯一?我希望结果是
111 10
。似乎您希望输入一个短语,如
*laptop*
,以获得所有笔记本电脑的结果。@bblincoe我想使用项目ID(假定为唯一)进行搜索如果是这样的话,结果不就是
111 laptop 500 10
?您的意思是
map.get(“111”)
?你真的需要编辑你的问题以反映你想做什么。这正是我想要的。我得到了期望的输出。非常感谢你!
public class Item 
{
String itemID;
String itemName;
double price;
int quantity;

public Item(String itemID, String itemName, double price, int quantity)
{
    this.itemID = itemID;
    this.itemName = itemName;
    this.price = price;
    this.quantity = quantity;
}

public void printItemDetails()
{
    System.out.println("ID\tItemName\tUnitPrice\tQuantity");
    System.out.println("===================================================");

    System.out.println(this.itemID+ "\t" +this.itemName+ "\t" +this.price+ "\t"+this.quantity);
}
}
for (Item otherItem : map.values()) {
    if((otherItem.price <= item.price + 100)
            && (otherItem.price >= item.price - 100)) {
        otherItem.printItemDetails();
    }
}