2017-06-09 81 views
-9

在标记重复或下调前仔细阅读。随机对象的ArrayList

我的要求是洗牌对象的Arraylist保持列表数据相同,只是改变位置。 我有一个类型Dummydata的:

List<DummyData> dataList = new ArrayList<>(); 

我DummyData类有三个字符串字段。

So adding some data for clarification: 

dataList.add(new DummyData("Item1","Price1","Discount1")); 
dataList.add(new DummyData("Item2","Price2","Discount2")); 
dataList.add(new DummyData("Item3","Price3","Discount3")); 
dataList.add(new DummyData("Item4","Price4","Discount4")); 
dataList.add(new DummyData("Item5","Price5","Discount5")); 

当我使用Collections.shuffle(dataList);

输出为:

Item5 Price3 Discount4 
Item2 Price1 Discount2 
and some random output like this everytime. 

我想要的输出是:

Item2 Price2 Discount2 
Item5 Price5 Discount5 
Item1 Price1 Discount1 

只是位置应该改变列表数据不能混杂。 所以我的问题是这可能实现使用Collections.shuffle或不?

+5

什么是'dataList'?它不能是java.util.ArrayList,因为它没有带3个参数的add方法。 – Eran

+2

将这三个物品中的每一个都封装在一个容器中。然后洗牌这些容器的清单。 – SHG

+1

伊兰是完全正确的,你的代码不能像你所描述的那样工作,因此你没有描述你的实际问题,因此没有人使用水晶球可以帮助你。 –

回答

3

嗨萨米特我不知道为什么很少有downvote那是因为你还没有被告知,你是新来的Java语言 请在下面找到

import java.util.Collections; 
import java.util.LinkedList; 
import java.util.List; 

final class Product { 
    private final String name; 
    private final Double price; 
    private final Double discount; 

    Product(String name, Double price, Double discount) { 
     this.name = name; 
     this.price = price; 
     this.discount = discount; 
    } 

    @Override 
    public String toString() { 
     return "{name=" + name + ", price=" + price + ", discount=" + discount + "}"; 
    } 
} 

public final class Main { 

    public static void main(String[] args) { 
     List<Product> products = new ArrayList<>(); 
     products.add(new Product("Watch", 45.99, 9.99)); 
     products.add(new Product("Keyboard", 21.99, 3.99)); 
     products.add(new Product("Mouse", 99.99, 4.99)); 

     System.out.println("Original items Before shuffle are"); 
     products.forEach(System.out::println); 

     Collections.shuffle(products); 
     System.out.println("Original items After shuffle are"); 
     products.forEach(System.out::println); 
    } 
} 
+0

非常感谢@ sector11问题与我的代码是我使用ArrayList而不是LinkedList。 – sumit

+0

当我提供回答问题所需的所有必要信息时,不知道他们为什么会降低投票数。 – sumit

+0

@sumit更新为ArrayList和是的,他们有权downvote你的问题不是全部清除! – sector11

-1

我的回答试试这个

Collections.shuffle(dataList); 
Log.d(TAG,dataList.toString()); 

用你的逻辑工作

Collections.shuffle(dataList); 
    ArrayList<DummyData> l1=new ArrayList<>(); 
    for(DummyData e : dataList){ 
     l1.add(e); 
    } 
    Log.d(TAG,l1.toString()); 
+0

你知道l1.toString()的输出吗? – sector11