繁体   English   中英

如何通过使用流在HashMap中打印值的键

[英]How to print the key of the values in HashMap by using stream

请在下面的代码帮助我

我得到这样的输出

Enter name:Chaya
[455-567-8888, 655-884-4557, 811-115-5556]
Enter phone: 7666644556
7666644556 = [Chaya]
I need to get an output like this
Enter name: Chaya
455-567-8888
655-884-4557
811-115-5556
Enter phone: 7666644556
7666644556 = Bhanu

我无法解决名称输出的问题,它输出的是“ Chaya”而不是“ Bhanu”。 我可以使用toString方法来打印电话号码值
请详细说明.....

public class PhNo 
{
    private static String name;
    private static long phno;

    public static void main(String[] args) 
    {
            HashMap<String, List<Long>> map = new HashMap<String, List<Long>>();
            List<Long> One = new ArrayList<Long>();
            One.add(1111111111L);
            One.add(9444445555L);

            List<Long> Two = new ArrayList<Long>();
            Two.add(7666644556L);

            List<Long> Three = new ArrayList<Long>();
            Three.add(4555678888L);
            Three.add(6558844557L);
            Three.add(8111155556L);

            List<Long> Four = new ArrayList<Long>();
            Four.add(4555678899L);
            Four.add(6558844566L);
            Four.add(8666655556L);

            map.put("Arya", One);
            map.put("Bhanu", Two);            
            map.put("Chaya", Three);
            map.put("Dhamu", Four);

            System.out.println("Enter name: ");
            Scanner userInput = new Scanner(System.in); 
            name = userInput.nextLine();

            List<Long> phoneNum = map.get(name);
            System.out.println(String.valueOf(phoneNum).replaceAll("(\\d{3})(\\d{3})(\\d+)", "$1-$2-$3"));                    

            System.out.println("Enter phone: ");              
            phno = userInput.nextLong();    

            System.out.println(phno+" = "+ getKeysByValue(map));

     }

    static List<String> getKeysByValue(Map<String, List<Long>> map) 
    {
     return map.entrySet()
              .stream()
              .filter(entry -> Objects.equals(entry.getKey(), name))
              .map(Map.Entry::getKey)
              .collect(Collectors.toList());        
    }
}

您可以使用 :

static String getName(Map<String, List<Long>> users, Long phone) throws Exception {
    return users.entrySet()
            .stream()
            .filter(entry -> entry.getValue().contains(phone))
            .findFirst()
            .map(user -> user.getKey())
            .orElseThrow(() -> new Exception("No result found"));
}

注意 :

  • 您的方法名称应为重要名称(而不是将其更改为getName
  • 我假设您的方法应返回String(具有此电话号码的用户名),而不是Long列表
  • 如果您的方法找不到任何结果怎么办? (您可以抛出异常)
  • 如果将phno值作为第二个参数传递给方法(感谢Conffusion ),然后像这样的getName(map, phno)那样调用您的方法,则代码将更具可读性。
  • 您使用的设计一点都不好,相反,我建议创建一类拥有用户名和一系列电话号码的用户,这将易于阅读和操作。
  • 变量名称应小写而不是大写

如果要获取具有该电话号码的所有用户名,则可以使用:

static List<String> getNameOfUsersByPhoneNumber(Map<String, List<Long>> map, Long phone) {
    return map.entrySet()
            .stream()
            .filter(entry -> entry.getValue().contains(phone))
            .map(entry->entry.getKey())
            .collect(Collectors.toList());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM