加入Java的2个部分列表

时间:2015-03-03 17:43:05

标签: java list join

我有两个包含项目的列表(列表1和列表2)。 我将创建第三个,这里称为list_mix,有10个项目,它将收到:

  • 6个第一个位置或list1和
  • 的60%
  • 4个第一个位置或list2的40%。

新列表(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”我将获得所有项目,但我只想要两个列表中的第一个。我怎么能得到这个?

3 个答案:

答案 0 :(得分:1)

您可以使用subList方法:

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

然后使用Collections.shuffle(list_mix);

随机化列表的顺序

答案 1 :(得分: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));

答案 2 :(得分: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]

希望这有帮助。

干杯!!