스트림의 인덱스에 액세스하면서 스트림을 반복하는 간결한 방법이 있습니까?
String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};
List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
.filter(e -> e.getValue().length() <= e.getKey())
.map(Entry::getValue)
.collect(toList());
LINQ 예제에 비해 다소 실망스러워 보입니다.
string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();
더 간결한 방법이 있습니까?
또한 지퍼가 움직이거나 제거 된 것 같습니다 ...
IntStream.rangeClosed(x, y)
.
List<String> allCities = map.values().stream().flatMap(list -> list.stream()).collect(Collectors.toList());
zip
다양한 값을 갖는 실험적인 값이있는 스트림과 함께 BiStream
또는 이라고 제거되었습니다 MapStream
. 주된 문제는이 작업을 효과적으로 수행하기 위해서는 실제로 구조적으로 형식화 된 쌍 (또는 튜플) 형식이 필요하다는 것입니다. 하나가 없으면 일반 페어 또는 튜플 클래스를 쉽게 만들 수 있습니다. 여러 번 수행되었지만 모두 같은 유형으로 지워집니다.
intRange()
? 지금까지 Java 8 에서이 방법을 사용하지 않았습니다.