多个调用的Stream :: map()效率

时间:2016-11-09 10:58:37

标签: java java-stream

考虑一个简单的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)

1 个答案:

答案 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