2015-03-03 4 views
1

У меня есть два списка с элементами (список 1 и список 2). я создам третий, здесь под названием list_mix, с 10 пунктов, и он получит:Присоединение ЧАСТИ 2 списков в Java

  • 6 первые позиции или 60% list1 и
  • 4 первые позиции или 40% list2 ,

Этот новый список (list_mix) должен получать предметы из списков 1 и 2 случайным образом.

Вот пример: JoinLists общественного класса {

public static void main(String[] args) { 

     List<String> list1 = new ArrayList<String>(); 
     list1.add("dog","cat","rabbit","bat","zebra","bear","turtle","mouse","fly","bird"); 

     List<String> list2 = new ArrayList<String>(); 
     list2.add("bee","horse","mule","cow","fish","shark","lion","tiger","elephant","panther"); 

    List<String> list_mix = new ArrayList<String>(); 
     list_mix.addAll(list1); 
     list_mix.addAll(list2); 

    System.out.println("list1 : " + list1); 
    System.out.println("list2 : " + list2); 
    System.out.println("list_mix : " + list_mix); 

} 

То, что я хочу, это следующий результат в list_mix: Выход

list1 : [dog,cat,rabbit,bat,zebra,bear,turtle,mouse,fly,bird] 
list2 : [bee,horse,mule,cow,fish,shark,lion,tiger,elephant,panther] 
list_mix : [dog,bee,cat,horse,rabbit,mule,bat,cow,zebra,bear] //A list with 10 items, using 60% of list 1 and 40% of list 2 

Если я использую ".addAll" Я буду получить все предметы, но я хочу только первые из двух списков. Как я могу это получить?

ответ

0

Вы можете создать метод, который поможет извлечь часть списка для данного процента.

See Java sublist docs

После того, как у вас есть подсписок вы должны использовать Collections.shuffle для рандомизации результатов.

Также я обновил способ инициализации строк массива в вашем коде, вот обновленный код.

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

public class RandomList { 

private static List<String> getSubList(List<String> list, int percentage) { 
    return list.subList(0, (percentage/10)); 
} 

public static void main(String[] args) { 

    String[] array1 = { "dog", "cat", "rabbit", "bat", "zebra", "bear", 
      "turtle", "mouse", "fly", "bird" }; 

    List<String> list1 = new ArrayList<String>(); 
    list1.addAll(Arrays.asList(array1)); 

    String[] array2 = { "bee", "horse", "mule", "cow", "fish", "shark", 
      "lion", "tiger", "elephant", "panther" }; 

    List<String> list2 = new ArrayList<String>(); 
    list2.addAll(Arrays.asList(array2)); 

    List<String> list_mix = new ArrayList<String>(); 
    list_mix.addAll(getSubList(list1, 60)); 
    list_mix.addAll(getSubList(list2, 40)); 

    Collections.shuffle(list_mix); 

    System.out.println("list1 : " + list1); 


    System.out.println("list2 : " + list2); 
     System.out.println("list_mix : " + list_mix); 

    } 
} 

Выхода

list1 : [dog, cat, rabbit, bat, zebra, bear, turtle, mouse, fly, bird] 
list2 : [bee, horse, mule, cow, fish, shark, lion, tiger, elephant, panther] 
list_mix : [cat, cow, zebra, rabbit, mule, dog, bear, bat, horse, bee] 

Надеется, что это помогает.

Cheers !!

+0

Спасибо Sacnhin, конечно это помогло:) Я очень ценю вашу заботу с кодом, это был лучший ответ –

1

Вы можете использовать subList метод:

list_mix.addAll(list1.subList(0, 6)); 
list_mix.addAll(list2.subList(0, 4)); 

Затем рандомизации порядок использования списка Collections.shuffle(list_mix);

+0

Спасибо, Жан! Это мне очень помогло. –

+0

Добро пожаловать. –

0

Вот метод, который может убрать вещи для вас:

public List<String> getSubList(List<String> in, int magnitude) { 
    List<String> back; 
    if (in.size() > 10) { // if > 10, (magnitude*10)% can be more than magnitude 
     //use percentage 
     back = new ArrayList<>(in); //prevent modifying outside contents 
     Collections.shuffle(back); //randomize, use ThreadLocalRandom instead if working with big collections 
     magnitude = (in.size() * (magnitude * 10))/100; //set our new magnitude 
    } else { 
     back = in; //just use inserted elements if not using percentage 
    } 
    return back.subList(0, magnitude); //return our sublist 
} 

Затем это просто:

List<String> mixed = new ArrayList<>(); 
mixed.addAll(getSubList(list1, 6)); 
mixed.addAll(getSubList(list2, 4)); 
+0

Большое спасибо Rogue :) –