2015-05-18 15 views
5

Tôi có một Danh sách mà tôi cần thêm tiền tố vào tất cả các yếu tố trong danh sách của mình.Cách thêm tiền tố vào tất cả các thành phần của Danh sách một cách hiệu quả?

Dưới đây là cách tôi đang thực hiện bằng cách lặp lại danh sách rồi thêm danh sách. Có cách nào khác tốt hơn để làm điều đó không? Bất kỳ một lớp lót có thể làm cùng một công cụ?

private static final List<DataType> DATA_TYPE = getTypes(); 

public static LinkedList<String> getData(TypeFlow flow) { 
    LinkedList<String> paths = new LinkedList<String>(); 
    for (DataType current : DATA_TYPE) { 
     paths.add(flow.value() + current.value()); 
    } 
    return paths; 
} 

Tôi cần trả về LinkedList vì tôi đang sử dụng một số phương pháp của lớp LinkedList như removeFirst.

Tôi đang sử dụng Java 7 kể từ bây giờ.

+0

Sử dụng Java 8 Streams với 'map'. –

+0

Tôi đang sử dụng Java 7 không may. – user1950349

Trả lời

7

Đối với một lớp lót, sử dụng Java 8 Luồng:

List<String> paths = DATA_TYPE.stream().map(c -> flow.value() + c.value()).collect(Collectors.toList()); 

Nếu bạn phải tạo ra một LinkedList, bạn nên sử dụng một Collector khác nhau.

+0

Tôi đang sử dụng Java 7 không may. – user1950349

+2

@ user1950349 Trong Java 7, việc triển khai của bạn trông ngắn gọn như nó có thể. – Eran

3

thực hiện của bạn trông ok, nhưng nếu bạn muốn một cái gì đó khác nhau, hãy thử này:

public static List<String> getData(final TypeFlow flow) { 
    return new AbstractList<String>() { 
     @Override 
     public String get(int index) { 
      return flow.value()+DATA_TYPE.get(index).value(); 
     } 

     @Override 
     public int size() { 
      return DATA_TYPE.size(); 
     } 
    }; 
} 

Bằng cách này bạn tạo ra một "danh sách ảo" mà không thực sự chứa dữ liệu, nhưng tính nó khi đang bay.

+0

Sự khác nhau giữa phiên bản và phiên bản của tôi ở đây là gì? Bạn có ý nghĩa gì với danh sách ảo ở đây? – user1950349

+0

Nó không mất bộ nhớ bổ sung ngoại trừ một số lượng không đổi như 20-30 byte. Và nó không thực hiện bất kỳ nối chuỗi nào cho đến khi bạn bắt đầu duyệt qua danh sách này. Phiên bản của bạn tạo tất cả các chuỗi được đặt trước và lưu chúng vào bộ nhớ trước để nhận bộ nhớ bổ sung O (n) trong đó n là kích thước danh sách 'DATA_TYPE'. Trong trường hợp của bạn, điều đó có lẽ không quan trọng, nhưng nếu bạn có hàng triệu mục nhập trong 'DATA_TYPE', dấu chân bộ nhớ có thể khác nhau đáng kể. –

+0

Triển khai rất thú vị! – marcolopes

Các vấn đề liên quan