我有一个与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();
使用此代码,我只能得到一个条目。你能帮我弄一个通过筛选的所有条目的列表吗?
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 - 无需声明参数类型。 编译器可以从参数的值推断出相同的