在实践中,是能够更好地返回像一个空列表此:
return Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)
或者像这样:
return new ArrayList<Foo>();
Run Code Online (Sandbox Code Playgroud)
或者这完全取决于你要对返回的列表做什么?
在C#中,我使用LINQ和IEnumerable一点点.一切都很好(或至少大部分都是如此).
但是,在很多情况下,我发现自己需要一个空IEnumerable<X>的默认值.也就是说,我想
for (var x in xs) { ... }
Run Code Online (Sandbox Code Playgroud)
无需空检查即可工作.现在这是我目前所做的,取决于更大的背景:
var xs = f() ?? new X[0]; // when xs is assigned, sometimes
for (var x in xs ?? new X[0]) { ... } // inline, sometimes
Run Code Online (Sandbox Code Playgroud)
现在,虽然上面对我来说完全没问题 - 也就是说,如果创建数组对象有任何"额外开销"我只是不在乎 - 我想知道:
在C#/ .NET中是否存在"空的不可变IEnumerable/IList"单例?(而且,即使没有,是否有一种"更好"的方式来处理上述情况?)
Java具有Collections.EMPTY_LIST不可变的单例 - "良好类型"的通道Collections.emptyList<T>()- 用于此目的,虽然我不确定类似的概念是否甚至可以在C#中工作,因为泛型的处理方式不同.
谢谢.
我正在阅读“ 了解Haskell的伟大成就! ”的“入门”一章!。它说:
null检查列表是否为空。如果是,则返回True,否则返回False。使用此函数代替xs == [](如果您有一个名为的列表xs)
我在ghci中尝试过:
xs = [] -- and then,
xs == []
null xs
Run Code Online (Sandbox Code Playgroud)
他们俩都是True。
我想知道有什么区别。
我应该使用该null函数代替,== []为什么?
如何在不手动输入的情况下制作许多空列表
list1=[] , list2=[], list3=[]
Run Code Online (Sandbox Code Playgroud)
是否有一个for循环,这将使我'n'这样的空列表?
如果我在一些可能多次实例化的类中有一个很少使用的集合,我有时可能会求助于以下"成语"以节省不必要的对象创建:
List<Object> list = null;
void add(Object object) {
if (list == null)
list = new ArrayList<Object>();
list.add(object);
}
// somewhere else
if (list != null)
for (Object object : list)
;
Run Code Online (Sandbox Code Playgroud)
现在我想知道我是否无法使用删除那些空检查Collections.emptyList(),但是我必须改变if check in add()like:
if (list == Collections.<Object>emptyList())
list = new ArrayList<Object>();
Run Code Online (Sandbox Code Playgroud)
除了每次分配一个新的空集合之外,还有更好的方法来处理这个问题吗?
编辑:只是为了清楚,我想使用Collections.emptyList(),但上面检查add()真的很难看......我想知道是否有更好的方法来做它甚至一个完整的其他方式处理这个.
<TextView
android:id="@android:id/empty"
style="@style/FacebookFont"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="@string/no_result_found"
android:textColor="@color/white" />
Run Code Online (Sandbox Code Playgroud)
这是空视图的xml代码.我将空视图设置如下:
list.setAdapter(adapter);
list.setEmptyView(findViewById(android.R.id.empty));
Run Code Online (Sandbox Code Playgroud)
即使在填充listview之前,我也会在列表视图中显示这些项目,并显示空视图.当listview包含某个项目时,我不希望显示该空视图.
请帮忙.
以下内容对我有意义:
>>> [] is []
False
Run Code Online (Sandbox Code Playgroud)
鉴于列表是可变的,我希望[]每次它出现在表达式中时都是一个新的空列表对象.但是,使用这个解释,以下让我感到惊讶:
id([]) == id([])
True
Run Code Online (Sandbox Code Playgroud)
为什么?解释是什么?
我是Java8的新手.我已经实现了列表和过滤器.我在代码中进行了空检查.如果在同一代码片段中检查列表是否为空,我将不胜感激.如果列表不为空,则代码应继续进行断言.
list.stream().filter(listElement -> listElement != null).
forEach((listElement) -> Assert.assertEquals(
ValueType.CANDY,
listElement.getCandyType()));
Run Code Online (Sandbox Code Playgroud) Numpy 有这个辅助函数np.empty,它将:
返回给定形状和类型的新数组,而不初始化条目。
当我想使用tf.concat创建张量时,我发现它非常有用,因为:
输入张量的维数必须匹配,除axis之外的所有维数必须相等。
因此,从一个具有预期形状的空张量开始会派上用场。有没有办法在张量流中实现这一点?
[编辑]
为什么我想要这个的简化示例
netInput = np.empty([0, 4])
netTarget = np.empty([0, 4])
inputWidth = 2
for step in range(data.shape.as_list()[-2]-frames_width-1):
netInput = tf.concat([netInput, data[0, step:step + frames_width, :]], -2)
target = tf.concat([target, data[0, step + frames_width + 1:step + frames_width + 2, :]], -2)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,如果 netInput 或 netTarget 被初始化,我将把一个额外的例子与该初始化连接起来。并用第一个值初始化它们,我需要破解循环。没什么市长,我只是想知道是否有一种“tensorflow”的方式来解决这个问题。
为什么
public List<String> getList(){
if (isMyListOKReady())
return myList;
return Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)
汇编得很好,但是
public List<String> getList(){
return isMyListReady() ? myList : Collections.emptyList();
}
Run Code Online (Sandbox Code Playgroud)
Eclipse说"Type mismatch: cannot convert from List<Object> to List<String>"?
empty-list ×10
collections ×3
java ×3
list ×3
python ×3
android ×1
c# ×1
filter ×1
generics ×1
haskell ×1
ienumerable ×1
is-empty ×1
java-8 ×1
java-stream ×1
null ×1
numpy ×1
singleton ×1
tensorflow ×1