어머니 :
나는 목록을하는 방법이있다. 목록은 모두 "항목 1이"와 "항목 2"가,이 둘 중 하나를 제거해야합니다,하지만 난 그것을 무작위로 할 필요가 (즉, 시간의 절반 제거 "항목 1"반 시간 "항목 2"가 제거)가 포함되어있는 경우. 그렇지 않으면 변경되지 않은 목록을 떠나야한다. 당신이 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 {
}
}
나는 확실하지가 시간의 절반을 제거하는 방법을 생각합니다. 어떤 도움 appriciated
Prashant Zombade :
목록을 셔플 트릭을 할 수 있습니다. 의 보장이 없지만 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 {
}