(My biggest beef is personal, in that I'm by nature a scientist and what was most interesting in the department has been officially purged, although a cut down version of 6.001 (SICP) is still being taught in January, and you can even earn credit if you're one of the first N to sign up (purely a resource constraint there).)
(Also BTW, enrollment has climbed back up, 305 sophomores are declared EECS majors this fall term.)
Problem is, the multi-core future is very much here today and as far as I know functional programming remains the best practical way to address SMP/cNUMA systems (well, you can always go to actors but then you end up copying a lot of data if you're not functional and in general they haven't caught on like their proponents had hoped, except that of course that style is used for less tightly coupled multi-processor systems like today's big supercomputers).
If you only ever use Java not only will you not know how to functionally program (this can be learned on your own anyhow), but also, and more importantly, you won't know when it's best to.