Sri Lanka produced a brilliant bowling performance to beat the Kiwis by 112 runs in their World Cup Group A clash at Wankhede Stadium in Mumbai on Friday.
Chasing 266, New Zealand were bowled out for a paltry 153 runs in 35 overs.
Muttiah Muralitharan four wickets broke New Zealand's back as he got rid of James Franklin, Kane Williamson, Ross Taylor and Scott Styris in quick succession.
Dilshan joined the party of spinners to dismiss another Kiwi hope in the form of Nathan McCullum. Dilshan bowled a full length delivery, N McCullum went for an expansive drive, got a thick outside edge and Jayawardene on the slips pouched a dolly.
After Angelo Mathews and Nuwan Kulasekara, Mendis struck with the ball to scalp Jesse Ryder. Ryder feathered an outside off stump ball straight into the hands of the keeper.
Kulasekara removed Guptill plump leg before the wicket of a perfect in-swinger, landed on off and hit him low on the pad in front of all three stumps.
Mathews claimed Brendon McCullum of a good length delivery as he opened the face on that and guided it into Mahela Jayawardene's hands on first slip.
Earlier, Kumar Sangakkara led from the front to hit a fine 111 as Sri Lanka posted 265/9 against the Kiwis which was marred by an unsavoury catch controversy.
The Sri Lankan skipper also put on 145 runs for the third wicket with his deputy Mahela Jayawardene (66) to pull his team out of early trouble in the day-night match.
The two teams have already made it to the quarterfinals and the result of this game will determine their final Group A positions.
Sri Lanka lost opener Upul Tharanga early when he was run out in the third over after Sangakkara won the toss and elected to bat in hot and humid conditions.
Tharanga backed up too far and Tim Southee (3-63) managed to get his hand to a straight drive from Tillakaratne Dilshan before the ball rolled on to hit the stumps.
Dilshan followed his partner to the pavilion soon, lobbing a simple catch to Jacob Oram off Southee while trying to go for an ambitious shot on the leg side, plunging Sri Lanka to 19-2.
Jayawardene got embroiled in a controversy early in his innings.
The former captain tried to play a defensive shot in the 24th over against off-spinner Nathan McCullum but ended up chipping the ball back to the bowler.
McCullum dived and managed to get his right hand under the ball to cap what looked like a stunning effort.
But even as McCullum broke into a celebration, TV umpire Amish Saheba was called in and he ruled it not out.
A furious McCullum and Kiwi skipper Ross Taylor angrily protested the decision with on-field umpire Asad Rauf.
Jayawardene, then on 26, hit six fours in a dour 90-ball innings before being adjudged trapped leg before off Southee, a decision he asked to be reviewed but in vain.
Sangakkara played a captain's innings, racing to his 11th century and completing 9,000 one-day international runs in the process, the fourth Sri Lankan player to the mark.
This was Sangakkara's first three-figure score in 63 innings, having gone without a ton since June 2008.
He was bowled by McCullum in the 42nd over after facing 128 balls and hitting 12 fours and two sixes.
Angelo Mathews provided the late impetus to the innings with an unbeaten 41 off 35 balls.