当前位置: 首页 > 知识库问答 >
问题:

使用lambda表达式由value类的成员搜索树映射

冯奇思
2023-03-14

我有一个与Java8中的lambda表达式有关的问题。

  public class Message implements MessageBase 
  {  
      private String id;
      private String message;
      private String author;
      private Long timestamp;

      public Message()
      {
          this.id=null;
          this.message=null;
          this.author=null;
          this.timestamp= null;
      }

      public Message(String id, String message,String author,Long timestamp)
      {
          this.id=id;
          this.message=message;
          this.author=author;
          this.timestamp= timestamp;
      }

      public String getId() 
      {
          return id;
      }

      public void setId(String id) 
      {
          this.id = id;
      }

      public String getMessage() 
      {
          return message;
      }

      public void setMessage(String message) 
      {
          this.message = message;
      }

      public String getAuthor() 
      {
          return author;
      }

      public void setAuthor(String author) 
      {
          this.author = author;
      }

      public long getTimestamp() 
      {
          return timestamp;
      }

      public void setTimestamp(long timestamp) 
      {
          this.timestamp = timestamp;
      }

      @Override
      public boolean equals(Object o) 
      {
          if (this == o) 
              return true;
          if (!(o instanceof Message)) 
              return false;

          Message message1 = (Message) o;

          if (getTimestamp() != message1.getTimestamp()) 
              return false;
          if (!getId().equals(message1.getId())) 
              return false;
          if (!getMessage().equals(message1.getMessage())) 
              return false;
          return getAuthor().equals(message1.getAuthor());
      }

      @Override
      public int hashCode() 
      {
          int result = getId().hashCode();
          result = 31 * result + getMessage().hashCode();
          result = 31 * result + getAuthor().hashCode();
          result = 31 * result + (int) (getTimestamp() ^ (getTimestamp() >>> 32));
          return result;
      }

      @Override
      public String toString() 
      {
          return "id=" + id +
                  ", message='" + message + '\'' +
                  ", author='" + author + '\'' +
                  ", timestamp=" + timestamp;
      }

下面是我的代码:

messages.entrySet().stream().filter(o->o.getValue().getAuthor().equalsIgnoreCase(author)).findAny();

使用此代码,我只能得到一个条目。你能帮我弄一个通过筛选的所有条目的列表吗?

共有1个答案

松铭
2023-03-14

findany最多返回一个条目。您应该将流收集到集合映射中,以获取所有条目:

Map<Long, Message> filteredMessages =   
    messages.entrySet()
            .stream()
            .filter(o->o.getValue().getAuthor().equalsIgnoreCase(author))
            .collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

List<Map.Entry<Long, Message>> filteredMessages =   
    messages.entrySet()
            .stream()
            .filter(o->o.getValue().getAuthor().equalsIgnoreCase(author))
            .collect(Collectors.toList());
 类似资料:
  • 主要内容:作为参数使用Lambda表达式,访问变量,方法引用在《 Java Lambda表达式》和《 Java Lambda表达式的3种简写方式》一节中我们了解了 Java Lambda 的概念并可以在匿名类的场合使用 Lambda 语法进行简单替换。本节主要介绍在 Java 中如何使用 Lambda 表达式。 作为参数使用Lambda表达式 Lambda 表达式一种常见的用途就是作为参数传递给方法,这需要声明参数的类型声明为函数式接口类型。示例代码如下:

  • 问题内容: 我有一个带有一个抽象方法的抽象类。如何使用lambda表达式实例化它。因为它扩展了一个类,所以不能将其制成接口。 问题答案: 正如Sleiman Jneidi在回答中指出的那样,您不能直接使lambda表达式目标成为抽象类。但是,您可以使用一种解决方法: 可以与lambda表达式一起使用: 如果您的方法有参数,请使用包中的或适当的接口代替。 这也是让您使用lambda而不是子类化的方式

  • 本文向大家介绍利用lambda表达式树优化反射详解,包括了利用lambda表达式树优化反射详解的使用技巧和注意事项,需要的朋友参考一下 前言 本节重点不讲反射机制,而是讲lambda表达式树来替代反射中常用的获取属性和方法,来达到相同的效果但却比反射高效。 每个人都知道,用反射调用一个方法或者对属性执行SetValue和GetValue操作的时候都会比直接调用慢很多,这其中设计到CLR中内部的处理

  • 问题内容: 我需要找到与特定正则表达式匹配的所有软件包: 基本上,包的名字应该与启动,并有后话。例如,以下软件包应匹配: 我可以做,但是有很多我不感兴趣的软件包。 是否提供通过正则表达式查找软件包的方法?或者,我应该只是通过管道传递结果来过滤掉无关的包? 此外,可能是一个的“交集” ,并有助于太。 问题答案: alecxe,我相信这是您要寻找的一线客。 如下面评论中铬酸盐所建议的那样,您可以根据需

  • (译注:目前支持lambda的gcc编译器版本为4.5,其它详细的编译器对于C++11新特性的支持请参考http://wiki.apache.org/stdcxx/C%2B%2B0xCompilerSupport) Lambda表达式是一种描述函数对象的机制,它的主要应用是描述某些具有简单行为的函数(译注:Lambda表达式也可以称为匿名函数,具有复杂行为的函数可以采用命名函数对象,当然,何谓复杂

  • Lambda表达式在Java 8中引入,并被吹捧为Java 8的最大特性.Lambda表达式有助于函数式编程,并简化了很多开发。 语法 (Syntax) lambda表达式的特征在于以下语法。 parameter -> expression body 以下是lambda表达式的重要特征。 Optional type declaration - 无需声明参数类型。 编译器可以从参数的值推断出相同的