public function testSortKeys() { $map = new Map(['b' => 'bval', 'a' => 'aval', 'c' => 'cval']); $map->sortKeys(); $this->assertEquals(['a' => 'aval', 'b' => 'bval', 'c' => 'cval'], $map->toArray()); $map = new Map(['b' => 'bval', 'a' => 'aval', 'c' => 'cval']); $map->sortKeys(function ($a, $b) { if ($a == $b) { return 0; } return $a < $b ? -1 : 1; }); $this->assertEquals(['a' => 'aval', 'b' => 'bval', 'c' => 'cval'], $map->toArray()); $map = new Map(['b' => 'bval', 'a' => 'aval', 'c' => 'cval']); $map->sortKeys(new StringComparator()); $this->assertEquals(['a' => 'aval', 'b' => 'bval', 'c' => 'cval'], $map->toArray()); }
/** * A list of tags sorted by tag-name * * @return ArrayList */ public function getSortedTags() { if ($this->comparator === null) { $this->comparator = new TagNameComparator(); } // 1) group by tag name $group = new Map(); foreach ($this->tags as $tag) { if (!$group->has($tag->getTagName())) { $group->set($tag->getTagName(), new ArrayList()); } $group->get($tag->getTagName())->add($tag); } // 2) Sort the group by tag name $group->sortKeys(new TagNameComparator()); // 3) flatten the group $sorted = new ArrayList(); foreach ($group->values() as $tags) { $sorted->addAll($tags); } return $sorted; }