Java 数组。getOnlyElement()?
是否有任何等效物可用于阵列 我知道这是一个很容易实现的函数,但是Collections.getOnlyElement()也是,它是用番石榴做的Java 数组。getOnlyElement()?,java,guava,Java,Guava,是否有任何等效物可用于阵列 我知道这是一个很容易实现的函数,但是Collections.getOnlyElement()也是,它是用番石榴做的 if(myArray != null && myArray.length == 1) return myArray[0] 顺便说一句,如果按如下方式初始化,数组可以是非空的,长度为0: MyType[] myArr = new MyType[0]; 我不知道有哪种库方法能做到这一点。这似乎太简单,不值得付出努力 (在搜
if(myArray != null && myArray.length == 1)
return myArray[0]
顺便说一句,如果按如下方式初始化,数组可以是非空的,长度为0:
MyType[] myArr = new MyType[0];
我不知道有哪种库方法能做到这一点。这似乎太简单,不值得付出努力
(在搜索结果页面之后)我遇到的最接近的是这个——它的语义与您所要求的不同。不太好,但仍然是一行:
Object x = Iterables.getOnlyElement(Arrays.asList(t));
Iterators.getOnlyElement(Iterators.forArray(array))
通过使用
迭代器.forArray
,您可以绕过创建此数组副本作为列表的需要,而是迭代数组本身。然后使用迭代器.getOnlyElement
从迭代器中获取第一个元素。获取数组中存储的唯一元素只需myArray[0]
。您的数组有什么值得注意的地方需要更多吗?@Votey-是的,添加检查if(myArray.length!=1)抛出新的RuntimeException(…)如果发生这种情况,我猜myArray为null不好,语义要求在数组长度不为1时抛出异常。我没有问如何实现这个,我知道实现是微不足道的。。。我问过它是否在任何地方实现过,我不这么认为,因为数组是OOP之前时代遗留下来的概念。我想最好的解决方案是,如果需要抛出异常,您可以自己在助手类的某个地方定义这样一个方法。为什么Collections.getOnlyElement()太简单而不值得付出努力?@ripper234-这是一个好问题。我所能说的是,如果有人认为这值得努力去做,他们要么懒惰,要么把代码藏在一个很难找到的地方。我不会为此把它转换成一个列表,不值得。@ripper234我认为垃圾收集器可以处理另外一个对象。@ripper234:如果你不知道,Arrays.asList
不会复制输入数组,它只是创建了一个List
视图。我认为这是我们能得到的最干净的。然后@Ray的回答有一些性能上的小优势,同样干净。