Ćwiczę java 8 strumieni i styl funkcjonalny na chwilę. Czasami próbuję rozwiązać niektóre zagadki programistyczne za pomocą strumieni. W tym czasie znalazłem klasę zadań, których nie potrafię rozwiązać za pomocą strumieni, tylko z klasycznym podejściem.Java 8 funkcjonalny styl iterować z indeksami
Jednym z przykładów tego rodzaju zadań jest: Biorąc pod uwagę tablicę liczb znajdź indeks elementu, który zsumuje lewą część tablicy poniżej zera. np. na tablicy [1, 2, 3, -1, 3, -10, 9]
odpowiedź będzie 5
Moim pierwszym pomysłem było wykorzystanie IntStream.generate(0, arr.length)...
ale nie wiem, jak gromadzić wartości i świadomość indeksu samym czasie.
więc pytania:
- Czy to możliwe, aby w jakiś sposób gromadzić wartość nad strumieniem, a następnie dokonać warunkowego wyjścia?
- Co to jest z równoległym wykonaniem? nie pasuje to do znalezienia indeksów, w których musimy być świadomi kolejności elementów.
Niemożliwe przy użyciu API strumienia, ponieważ ten problem wymaga śledzenia stanu nielokalnego (sumy wszystkich elementów prefiksu), który jest również powiązany z porządkiem elementów. Stream API został zaprojektowany, aby przetwarzanie równoległe było tak łatwe, jak sekwencyjne, ale tego rodzaju operacje są sekwencyjne z natury ... –
Możliwe duplikaty http://stackoverflow.com/questions/22789413/what-are-the-reasons-for -not-ma-an-index-in-java-8-streams i http://stackoverflow.com/questions/28989841/how-to-map-elements-of-the-list-to-their-indices-using -java-8-strumieni. –