Java 在地图界面上应用过滤器和地图后,如何显示键和值?

Java 在地图界面上应用过滤器和地图后,如何显示键和值?,java,java-8,Java,Java 8,/此代码同时显示id和name,因此上面的forEach循环不会显示它。 我甚至尝试使用收集器将结果存储在地图中,但这不起作用/ //不起作用 map3.entrySet() .stream().filter(i -> i.getKey()==131 || i.getKey()==101) .forEach(System.out::println); Map map4=map3.entrySet() .stream()。 collect(Collectors.t

/此代码同时显示id和name,因此上面的forEach循环不会显示它。 我甚至尝试使用收集器将结果存储在地图中,但这不起作用/

//不起作用

     map3.entrySet()
    .stream().filter(i -> i.getKey()==131 || i.getKey()==101)
    .forEach(System.out::println);
Map map4=map3.entrySet()
.stream()。
collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

如果输出不是您想要的,这意味着流返回的
Map.Entry
实现可能不会覆盖
对象的
toString
,因此您必须指定如何打印条目:

    Map<Integer,String> map4= map3.entrySet()
    .stream().filter(i -> i.getKey()==131 || i.getKey()==101).map(i-> i.getValue().toUpperCase()).
    collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
但是,查看您的完整代码,我不确定您是否需要首先创建该映射。您可以过滤原始列表并获得相同的输出:

map3.entrySet()
    .stream().filter(e -> e.getKey() == 131 || e.getKey() == 101)
    .forEach(e -> System.out.println(e.getKey() + " " + e.getValue().toUpperCase()));
顺便说一句,如果您的原始列表包含多个具有相同ID的
学生,则您的
收集器.toMap
将失败

此代码同时显示id和name,因此上面的forEach循环不会显示它

  • 以下代码段未显示键导致中间操作
    .map(i->i.getValue().toUpperCase())
    处理来自流的元素,并返回学生值元素(
    i->i.getValue()
    )的流不是键

    list2.stream()
         .filter(s -> s.getStudentId() == 131 || s.getStudentId() == 101)
         .forEach(s -> System.out.println(s.getStudentId() + " " + s.getStudName ().toUpperCase()));
    
  • 下面的代码显示键和值,因为您只需
    filter()
    stream元素,它返回student元素的流,即student(131)、student(101),您可以在其中迭代

    map3.entrySet()
    stream().filter(i -> i.getKey()==131 || i.getKey()==101).map(i->i.getValue().toUpperCase())
    .forEach(System.out::println);
    

在他的第一个示例中,他使用
映射
并仅获取值。@MuratK.Yep,因为如果将每个条目映射到对应的值,则会丢失密钥。谢谢@Eran…已解决并理解。但是,如果我们的列表包含重复的id,并且我们仍在将其转换为Map@Piyusharora这取决于在这种情况下您希望输出是什么。
map3.entrySet()
stream().filter(i -> i.getKey()==131 || i.getKey()==101).map(i->i.getValue().toUpperCase())
.forEach(System.out::println);
map3.entrySet()
.stream().filter(i -> i.getKey()==131 || i.getKey()==101)
.forEach(System.out::println);