加入 Java 中的 2 个列表的一部分
Joining PART of 2 lists in Java
我有两个包含项目的列表(列表 1 和列表 2)。
我将创建第三个,这里称为 list_mix,包含 10 个项目,它将收到:
- 前 6 个位置或 list1 的 60% 和
- 前 4 个位置或 list2 的 40%。
新列表 (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));
您可以创建一个方法来帮助提取给定百分比的列表的一部分。
获得子列表后,您应该使用 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]
希望对您有所帮助。
干杯!!
我有两个包含项目的列表(列表 1 和列表 2)。 我将创建第三个,这里称为 list_mix,包含 10 个项目,它将收到:
- 前 6 个位置或 list1 的 60% 和
- 前 4 个位置或 list2 的 40%。
新列表 (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));
您可以创建一个方法来帮助提取给定百分比的列表的一部分。
获得子列表后,您应该使用 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]
希望对您有所帮助。
干杯!!