extern crate itertools;
use itertools::Itertools;
fn main() {
let data = "abc12345abc".chars();
let key_func = |c: char| c.is_alphabetic();
for (key, iter) in data.batching(|mut it| {
let start = it.clone();
match it.next() {
None => return None,
Some(elt) => {
let key = key_func(elt);
let n = 1 + it.take_while_ref(|elt| key_func(*elt) == key).count();
return Some((key, start.take(n)))
}
}
})
{
for elt in iter {
println!("Key={:?}, elt={:?}", key, elt);
}
}
}