簡體   English   中英

為什么沒有getFirst(可迭代)方法?

[英]Why there is no getFirst(iterable) method?

IterablesgetLast提供了兩種方法

 public static <T> T getLast(Iterable<T> iterable);
 public static <T> T getLast(Iterable<T> iterable, @Nullable T defaultValue);

但只有一個用於getFirst

 public static <T> T getFirst(Iterable<T> iterable, @Nullable T defaultValue);

是否存在破壞對稱性的設計/實施原因?

我認為關鍵是沒有理由得到getFirst(iterable) ,因為這可以通過iterable.iterator().next() Guava做了一個很好的嘗試,以保持API小,因此不添加可以/應該以另一種方式輕松完成的事情。

另一方面,還沒有一種機制來測試iterable是否為空,如果是,則返回默認值而不是第一個值。 因此, getFirst(iterable, default)

此外,沒有一種簡單的方法來獲取最后一個元素,因此getLast(iterable)getLast(iterable, default)

作為@ JohnB答案的補充,我想展示Guava關於getFirst(iterable)的開發者意見 Kevin Bourrillion(負責人Guava的開發)在那里寫道:

iterable.iterator()。next()非常清晰,可讀且明確 我確切地知道它的作用,而使用Iterators.getFirst(),我必須跑掉並查看該庫設計師如何決定這樣做。

而且,你的一致性概念是非常錯誤的。 我們在如何呈現重要功能時使用一致性,但我們從不使用它來證明添加無用的功能,並且您也不應該在自己的庫中!

所以,你有一個選擇:

  • 使用iterable.iterator().next()
  • 使用Iterables.getFirst(Iterable<T> iterable, T default)
  • 使用Iterables.get(Iterable<T>, 0)
  • 編寫自己的方法(可能包含iterable.iterator().next()和一些文檔)並將其用作Iterables2.getFirst(iterable)
  • 等待凱文改變主意;)

PS:前段時間我有類似的疑問,當時發現了這個問題的確切復制品

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM