fn main() {
let some_vec = vec![1, 2, 3, 9, 8, 4, 5, 6, 7];
let mut iter = some_vec.iter();
println!("{:?}", iter.next());
println!("{}", iter.next().unwrap());
println!("{}", iter.next().unwrap());
println!("{}", iter.next().unwrap());
println!("{}", iter.next().unwrap());
println!("{}", iter.next().unwrap());
println!("{}", iter.next().unwrap());
println!("{:?}", iter.next());
let some_vec = vec![1, 2, 3, 7, 8, 4, 5, 6, 7];
let mut check = some_vec.iter().any(|&x| x > 2);
println!("The value of the function is {:?}", check);
let check: Option<&i32> = some_vec.iter().find(|&&x| x > 2);
println!("The value of the function find is {}", check.unwrap());
let check = some_vec.iter().position(|&x| x > 7);
println!("The value of the function position is {}", check.unwrap());
let check = some_vec.iter().rposition(|&x| x > 7);
println!("The value of the function rposition is {}", check.unwrap());
let check = some_vec.iter().max();
println!("The value of the function max is {}", check.unwrap());
let check = some_vec.iter().min();
println!("The value of the function min is {}", check.unwrap());
let mut iter = some_vec.iter().rev();
println!("The value of the function rev is {:?}", iter.next());
let filtered_values = some_vec.iter().filter(|&x| *x >= 4).collect::<Vec<&i32>>();
println!("{:?}", filtered_values);
let filtered_values = some_vec
.into_iter()
.filter(|&x| x >= 4)
.collect::<Vec<i32>>();
println!("{:?}", filtered_values);
let some_vec = vec![1, 2, 3, 7, 8, 4, 5, 6, 7];
let mapped_collection = some_vec.iter().map(|x| 2 * *x).collect::<Vec<i32>>();
println!("{:?}", mapped_collection);
let filtered_map = some_vec
.iter()
.map(|x| *x * 2)
.filter(|x| *x > 10)
.collect::<Vec<i32>>();
println!("{:?}", filtered_map);
}