我有一个方法将采用列表。如果列表同时包含“ item1”和“ item2”,则应删除其中之一 两个,但我需要随机进行(即,删除“ item1”的时间是一半,删除“ item2”的时间是一半)。否则,应保持列表不变。如果您传递null,则该方法不应该执行任何操作。
我有一个方法:
public static void removeItem(List<String> items) {
if (items.contains("item1") &&
items.contains("item2"))
{
Random random = new Random();
int randomIndex = random.nextInt(items.size());
items.remove(randomIndex);
} else if (items.isEmpty()) {
} else {
}
}
我不确定如何删除一半的时间。任何帮助
答案 0 :(得分:2)
改组列表可以解决问题。
尽管不能保证half the time
子句。
您可以在列表中包含任意数量的项目。
可能不是最佳解决方案,但我可以提出以下建议:
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("item2");
list.add("item3");
list.add("item1");
list.add("item4");
System.out.println("Before : " + list);
removeItem(list);
System.out.println("After : " + list);
}
public static void removeItem(List<String> items) {
if (items == null) {
// Handle the null list
System.out.println("List is null");
} else if (items.contains("item1") && items.contains("item2")) {
//Shuffle the list, randomize the items and then remove `item1` or `item2` which ever appears earliest.
Collections.shuffle(items);
// Modern approach
items.stream().filter(i->i.equals("item1") || i.equals("item2")).findAny().ifPresent(i->items.remove(i));
/*
int removeIndex = 0;
for (int i = 0; i < items.size(); i++) {
if (items.get(i).equals("item1") || items.get(i).equals("item2")) {
removeIndex = i;
break;
}
}
items.remove(removeIndex);
*/
} else if (items.isEmpty()) {
} else {
}
答案 1 :(得分:0)
此checkList
方法采用list
,检查两个项目是否都在列表中,如果它们都存在,则将其随机删除。如果list
为null
,则不执行任何操作。
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("item1");
list.add("item2");
list = checkList(list);
}
private static List<String> checkList(List<String> list){
//skip if null
if(list == null){
return list;
}
//find index of items
int index1 = list.indexOf("item1");
int index2 = list.indexOf("item2");
//if one item doesn't exist in list, its index will be -1
if(index1 >= 0 && index2 >= 0){
//get random number between 1 and 2
Random random = new Random();
int randomNumber = random.nextInt(2) + 1;
if(randomNumber == 1){
//remove item1
list.remove(index1);
}else{
//remove item2
list.remove(index2);
}
}
return list;
}
答案 2 :(得分:0)
您不能保证一个元素比另一个元素“在一半的时间内”被删除。但是,您可以做的是生成一个随机数0
或1
并根据该值删除其中一个元素。这实际上将模拟您想要的内容。
public static void removeItem(List<String> items) {
if (items == null || items.isEmpty()) {
return;
}
if (!items.contains("item1") || !items.contains("item2")) {
return;
}
int randomNumber = ThreadLocalRandom.current().nextInt(0, 2);
if (randomNumber == 0) {
items.remove("item1");
} else {
items.remove("item2");
}
}
答案 3 :(得分:0)
如果您的意思是随机删除任何项目,那么您可以按照@prashantzombade的ans顺序对项目进行洗牌;如果您要计算要随机删除项目1和项目2的时间,则可以实现奇数偶数的逻辑你。具有静态变量。
创建2个静态变量
获取静态变量的计数
一半时间(例如平均50%)实现逻辑
获取随机号码
如果否。甚至可以删除项目2,否则删除项目1
如果随机数为偶数2,则将静态变量的no均增加1。
如果您想实施以下过程,请在评论ans时上传代码示例。
在这里,我正在检查删除项目1和2的确切计数(确切时间是一半)
import java.util.Random;
import java.util.*;
class hello2
{
static int evn=0;
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("item1");
list.add("item2");
int randomNumber=0;
//list = checkList(list);
//skip if null
if(list!=null){
//find index of items
int index1 = list.indexOf("item1");
int index2 = list.indexOf("item2");
//if one item doesn't exist in list, its index will be -1
if(index1 >= 0 && index2 >= 0){
//get random number between 1 and 2
Random random = new Random();
randomNumber = random.nextInt(2) + 1;
if((randomNumber %2)== 0){
//remove item1
if(evn==1) //if last time item 2 deleted
{
list.remove(index2);
//System.out.println(list+" Static var="+evn+" Random no: "+randomNumber%2);
evn=0;
}
//else{System.out.println(list+" Static var="+evn+" Random no: "+randomNumber%2);}
}else{
//remove item2
if(evn==0) //if last time item 1 deleted
{
list.remove(index1);
//System.out.println(list+" Static var="+evn+" Random no: "+randomNumber%2);
evn=1;
}
//else{System.out.println(list+" Static var="+evn+" Random no: "+randomNumber%2);}
}
}
System.out.println(list);
}
}
}