#![allow(dead_code, deprecated, unused_variables, unused_mut)] use std::collections::BTreeMap; fn main() { let mut bt = BTreeMap::new(); bt.insert(20u8, "foo"); bt.insert(42u8, "bar"); let res = [0u8, 1, 11, 200, 22] .into_iter() .map(|x| { x.checked_sub(1) .and_then(|x| x.checked_mul(2)) .and_then(|x| bt.get(&x)) .or(Some(&"error!")) .copied() .unwrap() }) .collect::>(); assert_eq!(res, ["error!", "error!", "foo", "error!", "bar"]); }