如果我有一个List包含对象
new MyObj("some"),
new MyObj("foo"),
new MyObj("bar"),
new MyObj("xyz");
Run Code Online (Sandbox Code Playgroud)
并希望在匹配某些条件后使用Java 8流对其进行过滤,例如
myObj.prop = "foo";
Run Code Online (Sandbox Code Playgroud)
如何实现?
以上示例的结果应为
new MyObj("some"),
new MyObj("foo")
Run Code Online (Sandbox Code Playgroud)
那将是“传统”的方式:
List<MyObj> results = new ArrayList<>();
for (MyObj myObj : myObjList) {
if (!myObj.prop.equals("foo")) {
results.add(myObj);
} else {
results.add(myObj);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
它不是谓词限制流的重复,因为它不包含匹配的元素。但是,我应该能够适应takeWhile操作。
鉴于此打字稿(2.7.2)界面:
export interface A {
b?: string;
c?: boolean;
}
Run Code Online (Sandbox Code Playgroud)
这将按预期打印布尔值'false':
let a: A = {b: ''};
if (a.b && a.b.length > 0) {
a.c = true;
} else {
a.c = false;
}
console.log(a.c);
Run Code Online (Sandbox Code Playgroud)
但是,这会打印一个空的''字符串:
let a: A = {b: ''};
a.c = a.b && a.b.length > 0;
console.log(a.c);
Run Code Online (Sandbox Code Playgroud)
我在这里有点困惑.第二个例子应该像第一个例子一样,对吧?我错过了什么?