2015-05-18 18 views
5

Listemin tüm öğelerine bir önek eklemem gereken bir Listem var.Listenin tüm öğelerine önek nasıl eklenir?

Aşağıda, listeyi yineleyip ekleyerek bunu yapıyorum. Bunu yapmanın başka bir yolu var mı? Aynı şeyleri yapan herhangi bir iki astar?

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; 
} 

ben removeFirst gibi LinkedList sınıfının bazı yöntemler kullanıyorum beri LinkedList dönmek gerekir.

Şu an Java 7'de yaşıyorum.

+0

Java 8 Akımlarını "map" ile kullanın. –

+0

Maalesef Java 7'yi kullanıyorum. – user1950349

cevap

7

biri gömlekleri için Java 8 Akımlar kullanın:

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

Bir LinkedList üretmek gerekiyorsa, farklı bir Collector kullanmalıdır.

+0

Maalesef Java 7'yi kullanıyorum. – user1950349

+2

@ user1950349 Java 7'de uygulamanız olabildiğince kısa görünüyor. – Eran

3

Uygulamanız Tamam görünüyor, ama farklı bir şey istiyorsanız, bu deneyin:

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(); 
     } 
    }; 
} 

aslında verileri içerir, ancak anında bunu hesaplar olmayan bir "sanal listesi" oluşturmak Bu şekilde.

+0

Sürümünüz ile sürümüm arasındaki fark nedir? Burada sanal liste ile ne demek istiyorsun? – user1950349

+0

20-30 bayt gibi sabit bir miktar dışında ek bellek almaz. Ve bu listeyi geçmeye başlayana kadar herhangi bir dizgi birleştirme gerçekleştirmez. Sürümünüz tüm önek dizeleri oluşturur ve bunları önceden belleğe kaydeder; bu da n (n) 'DATA_TYPE' liste boyutu olan O (n) addtional belleğini alır. Durumunuz muhtemelen önemli değil, ancak DATA_TYPE'de milyonlarca girişiniz varsa, bellek ayak izi önemli ölçüde farklılık gösterebilir. –

+0

Çok ilginç bir uygulama! – marcolopes