8 java collections lambda java-8 java-stream
我有一个与Java 8中的lambda表达式相关的问题.
考虑以下Message课程:
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;
}
Run Code Online (Sandbox Code Playgroud)
它实现了MessageBase接口.我将Message类的对象存储在TreeMap- 中Map<Long, Message> messages.键是时间戳,值是Message对象.我必须TreeMap按作者查找所有条目,这是Message该类的一个字段.我正在尝试使用lambda表达式.
这是我的代码:
messages.entrySet().stream().filter(o->o.getValue().getAuthor().equalsIgnoreCase(author)).findAny();
Run Code Online (Sandbox Code Playgroud)
使用此代码,我只能获得一个条目.你能帮我看一下通过过滤器的所有条目的列表吗?
findAny最多返回一个条目.您应该将Stream收集到a Collection或a中Map以获取所有条目:
Map<Long, Message> filteredMessages =
messages.entrySet()
.stream()
.filter(o->o.getValue().getAuthor().equalsIgnoreCase(author))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
Run Code Online (Sandbox Code Playgroud)
要么
List<Map.Entry<Long, Message>> filteredMessages =
messages.entrySet()
.stream()
.filter(o->o.getValue().getAuthor().equalsIgnoreCase(author))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |