I have a list of integers values and I want to find the largest successive sequence integers in the list.
For example, let L be the following list of integers:
L = {1, 3, 4 , 6, 7, 8, 10, 12, 13}
Then I want to collect out of the stream only the following integers:
6, 7, 8
Because these numbers are the largest successive sequence integers in the list L.
Is it possible to do it using streams in Java 8?
This is what I have so far using simple iteration in Java:
int maxSeqSize = 0;
List<Cards> maxSeq;
int currentNumber;
int startSeq = -1;
List<Card> currentCards = new ArrayList<> Cards.getCards());
Collections.sort(currentCards, Cards::CompareByNumber);
for (currentNumber = 0; currentNumber< Cards.getCards().size() - 1; currentNumber++){
if((isSequentialCards(Cards.getCards().get(currentNumber ),
Cards.getCards().get(currentNumber + 1)))) {
if (startSeq == -1)
startSeq = currentNumber ;
}
else {
if(startSeq > 0 && currentNumber - startSeq + 1 >= maxSeqSize )
{
maxSeqSize = currentNumber - startSeq + 1;
maxSeq = currentCards .subList(startSeq,currentNumber +1);
}
startSeq = -1;
}
}
return maxSeq;
While isSequentialCards compare two cards by their value:
private boolean isSequentialCards(Card c1, Card c2) { if((c1.getNumber() == c2.getNumber() - 1)) return true; return false; }
Thanks in advance