use end() to be in line with Stream semantics