Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组。getOnlyElement()?_Java_Guava - Fatal编程技术网

Java 数组。getOnlyElement()?

Java 数组。getOnlyElement()?,java,guava,Java,Guava,是否有任何等效物可用于阵列 我知道这是一个很容易实现的函数,但是Collections.getOnlyElement()也是,它是用番石榴做的 if(myArray != null && myArray.length == 1) return myArray[0] 顺便说一句,如果按如下方式初始化,数组可以是非空的,长度为0: MyType[] myArr = new MyType[0]; 我不知道有哪种库方法能做到这一点。这似乎太简单,不值得付出努力 (在搜

是否有任何等效物可用于阵列

我知道这是一个很容易实现的函数,但是Collections.getOnlyElement()也是,它是用番石榴做的

 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的回答有一些性能上的小优势,同样干净。