加入 Java 中的 2 个列表的一部分

Joining PART of 2 lists in Java

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

新列表 (list_mix) 应该随机接收列表 1 和 2 中的项目。

这是一个例子: public class 加入列表 {

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

您可以使用 subList 方法:

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

然后随机化列表的顺序使用Collections.shuffle(list_mix);

这里有一个方法可以为您解决问题:

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

您可以创建一个方法来帮助提取给定百分比的列表的一部分。

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]

希望对您有所帮助。

干杯!!