They... are not expecting it to work the way you are expecting them to expect it to work(my, that's a confusing sentence).
Look at their implementation:
public ItemStack[] getResults(ItemStack input)
{
for(Map.Entry<ItemStack, ItemStack[]> entry : this.recipesList.entrySet())
{
if(this.compareItemStacks(input, entry.getKey()))
{
return entry.getValue();
}
}
return null;
}
private boolean compareItemStacks(ItemStack stack1, ItemStack stack2)
{
return stack2.getItem() == stack1.getItem() && (stack2.getMetadata() == 32767 || stack2.getMetadata() == stack1.getMetadata());
}
I mean yeah, there are better structures than a Map here, sure, but they can change it later.