PUBLIC OBJECT

Coding in the small with Google Collections: Iterables.getOnlyElement

Part 2 in a Series.

Iterables.getOnlyElement makes sure your collection or iterable contains exactly one element, and returns that. If it contains 0 or 2+ elements, it throws a RuntimeException. This comes up often in unit tests:

Before:

  public void testWorkSchedule() {
    workSchedule.scheduleUserOnDuty(jesse, mondayAt430pm, mondayAt1130pm);

    Set<User> usersOnDuty = workSchedule.getUsersOnDuty(mondayAt800pm);
    _assertEquals(1, usersOnDuty.size());_
    _assertEquals(jesse, usersOnDuty.iterator().next());_
  }`</pre>

### After:
<pre class="prettyprint">`  public void testWorkSchedule() {
    workSchedule.scheduleUserOnDuty(jesse, mondayAt430pm, mondayAt1130pm);

    Set&lt;User&gt; usersOnDuty = workSchedule.getUsersOnDuty(mondayAt800pm);
    _assertEquals(jesse, Iterables.getOnlyElement(usersOnDuty));_
  }

Iterables.getOnlyElement() describes intent more directly than Set.iterator().next() and List.get(0). As a special treat, there's an overloaded version to use if your Iterable might be empty.

Part 3