Giả sử tôi có một danh sách các khoảng thời gian (sắp xếp theo bắt đầu) và tôi muốn chia nhỏ chúng để tôi có danh sách các nhóm chồng chéo nhau. Vì vậy, ví dụ, với Interval
như:Danh sách phân vùng Java 8 thành các nhóm theo điều kiện liên quan đến các phần tử trước
public class Interval {
private final int start;
private final int end;
public Interval(int start,int end){
this.start = start;
this.end = end;
}
public int getStart(){return start;}
public int getEnd(){return end;}
public String toString(){ return "("+start+","+end+")"; }
}
Và một List<Interval>
như:
[(0,4),(1,7),(6,10),(13,17),(20,100),(22,31),(60,65)]
Tôi muốn có một sản lượng List<List<Interval>>
:
[[(0,4),(1,7),(6,10)],[(13,17)],[(20,100),(22,31),(60,65)]]
tôi có thể mã này lên, nhưng tôi thực sự thích cách tiếp cận chức năng hơn của Java 8, và muốn biết nếu có bất cứ điều gì giống như một cách thành ngữ để làm điều này bằng cách sử dụng các luồng Java 8.
Tôi đã xem kiểu "nhóm theo" được cung cấp Collectors, nhưng dường như chúng không áp dụng vì tôi không thực sự nhóm theo trình phân loại - bạn không thể tính toán các nhóm chỉ dựa trên một thuộc tính của từng phần tử riêng lẻ, bạn phải xem xét các thuộc tính của từng phần tử liên quan đến các nhóm đã được tính toán cho đến nay.
Chắc chắn có cách không điên rồ để làm điều này bằng các ngôn ngữ chức năng (mặc dù tôi nói như một người không thực sự là một lập trình viên chức năng :-)). Làm thế nào tôi có thể làm điều đó với các luồng trong Java 8?
Tôi đoán, 'this.start = end; 'không phải là thứ bạn muốn. Nhưng đó là một điều tốt khi bạn đang sử dụng các biến 'final' để lỗi ngay lập tức được trình biên dịch phát hiện. – Holger
Nhân tiện, đầu ra là gì khi đầu vào như sau: '[(60, 65), (22, 31), (20, 100)]'? Tất cả ba khoảng thời gian có nên được hợp nhất với nhau không? Nói cách khác, có thể thứ tự các khoảng đầu vào thay đổi kết quả không? –
@Tagir Valeev: điều kiện tiên quyết của câu hỏi (trong câu đầu tiên) là các phần tử được sắp xếp theo điểm bắt đầu của chúng. Thật dễ dàng để thư giãn yêu cầu đó bằng cách thêm một bước phân loại vào bất kỳ giải pháp nào. – Holger