为什么我可以average()在一个上调用方法而不在另一个上调用方法?它们不应该是等价的吗?
示例 1 - 作品
List<String> stringList = new ArrayList<>();
stringList.add("2");
stringList.add("4");
stringList.add("6");
// String array ("2","4", "6"
averageValue = stringList.stream()
.mapToInt(s -> Integer.valueOf(s))
.average()
.getAsDouble();
Run Code Online (Sandbox Code Playgroud)
示例 2 - 不编译(删除 mapToInt 调用,因为已经传递了整数流)
List<Integer> IntegerList = new ArrayList<>();
IntegerList.add(2);
IntegerList.add(4);
IntegerList.add(6);
averageValue = IntegerList.stream()
.average()
.getAsDouble();
Run Code Online (Sandbox Code Playgroud)
问题是,当我已经将整数流传递给它时,为什么我需要调用 mapToInt 方法?
任何人都可以清除我对cin.unget()功能的一些困惑。请考虑这段代码:
void skip_to_int()
{
if (cin.fail()) { // we found something that wasn’t an integer
cin.clear(); // we’d like to look at the characters
for (char ch; cin>>ch; ) { // throw away non-digits
if (isdigit(ch) || ch=="-") {
cin.unget(); // put the digit back,
// so that we can read the number
return;
}
}
}
error("no input"); // eof or bad: give up
}
Run Code Online (Sandbox Code Playgroud)
如果cin.unget()将数字放回输入流以再次读取,我会不会得到cin>>ch相同的字符来再次检查条件,从而陷入无限循环?