考虑一个简单的POJO:
class Foo {
private String id;
// Other fields, getters & setters ommited
}
如果我有一个List<Foo>
,并希望生成一个Stream<Integer>
并将所有ID转换为int
,那么在比较这种方法时,我在性能方面会有什么期望:
fooList
.stream()
.map(foo -> Integer.parseInt(foo.getId()))
......用这个:
fooList
.stream()
.map(Foo::getId)
.map(Integer::parseInt)
答案 0 :(得分:4)
可能第二个(必须测量),因为它会因为invokedynamic而将方法“带”到调用站点。 或者,我可能是错的,因为额外的地图操作和处理它所需的基础设施。将使用一些jmh结果更新帖子。
确实(根据我的测试),方法参考更快:
public function getMsgNotifications($user_id)
{
$this->db->select('conversations.conversation_id');
$this->db->distinct('conversations.conversation_id');
$this->db->from('conversations');
$this->db->join('messages','conversations.conversation_id = messages.conversation_id','INNER');
$this->db->where('conversations.user1_id', $user_id);
$this->db->or_where('conversations.user2_id', $user_id);
$this->db->where('messages.sender_id !=', $user_id);
$this->db->where('messages.seen', '');
$query = $this->db->get();
return $query->result();
}
以下是代码:
Benchmark Mode Cnt Score Error Units
MyBenchmark.doubleMap avgt 20 3.973 ± 0.057 ms/op
MyBenchmark.singleMap avgt 20 6.222 ± 2.216 ms/op