user2886192
user2886192

Reputation: 21

Adding String and int values to Arraylist - Java

I'm having trouble adding both string and int values to an arraylist. I'm reading in data from a tsv file, [String String String int] format. It works fine when all tokens are Strings, but I need to have the int to do some calculations later on.

When I try to use an int value it doesn't work. Should I try to add the int to the arraylist or parse afterwards?

Thanks for any help!

public class PlaycountData {

//declare variables
    public String userID;
    public String artistID;
    public String artistName;
    public int playcount;

    public PlaycountData(String userID, String artistID, String artistName, int playcount){
        this.userID = userID;
        this.artistID= artistID;
        this.artistName= artistName;
        this.playcount= playcount;
    }  // end constructor


    public PlaycountData(String[] rep) {
        this.userID = rep[0];
        this.artistID = rep[1];
        this.artistName = rep[2];
        //this.playcount = rep[3];
    }




    // getter methods
    public String getUserID(){
        return userID;
    }

    public String getArtistID(){
        return artistID;
    }

    public String getArtistName(){
        return artistName;
    }

    public int getPlaycount(){
        return playcount;
    }

    // setter methods
    public void setUserID(String userID){
        this.userID = userID;
    }

    public void setArtistID(String artistID){
        this.artistID = artistID;
    }

    public void setArtistName(String artistName){
        this.artistName = artistName;
    }

    public void setPlaycount(int playcount){
        this.playcount = playcount;
    }

    @Override 
    public String toString(){
        return userID + artistID + artistName + playcount; 
    }
}



public class LastFm {

static ArrayList<PlaycountData> playcountRecords;

public static void main(String [ ] args) throws IOException{

playcountRecords = new ArrayList<PlaycountData>(); // create a new arraylist of type PlaycountData

String fileName = "C:\\Users\\Siân\\Desktop\\sample2.tsv";

BufferedReader br = new BufferedReader(new FileReader(fileName)); // allows us to read contents of file

String line;

try{
    while((line = br.readLine()) != null ){ // keep reading if there are more lines in the file
        String[] rep = line.split("\t"); // enter the split line into an array
        PlaycountData playrep = new PlaycountData(rep); // create new PlaycountData object
        playcountRecords.add(playrep); // add array to arraylist
    } }catch(IOException e){
    System.err.println("An error has occurred" + e);
    System.exit(-1);
} finally{
    if(br != null)
        br.close(); // close the stream 
}

for(PlaycountData pr: playcountRecords){
    System.out.println(pr.getUserID() + " " + pr.getArtistID() + " " + pr.getArtistName()
            + " " + pr.getPlaycount());
} // outputs all the data

int[] plays = new int[playcountRecords.size()]; // create an int array to hold the playcounts

for(PlaycountData pr2: playcountRecords){
    System.out.println(pr2.getPlaycount());
}

Upvotes: 0

Views: 9332

Answers (5)

Tom Sebastian
Tom Sebastian

Reputation: 3433

Other way to achieve this to convert String token to integer as

this.playcount = Integer.valueOf(rep[3]);

Upvotes: 0

Konstantin Yovkov
Konstantin Yovkov

Reputation: 62864

You must know, that:

  1. You cannot add primitives to a List.
  2. The objects within a List should be of one type.

As a workaround, you can do:

this.playcount = Integer.parseInt(rep[3]);

This will transform the String to int and you will be able to assign it to your PlaycountData object.

Upvotes: 3

Rahul
Rahul

Reputation: 45070

You need to parse the String to an int to assign the value to your playcount in your PlaycountData you're creating.

public PlaycountData(String[] rep) {
        this.userID = rep[0];
        this.artistID = rep[1];
        this.artistName = rep[2];
        this.playcount = Integer.parseInt(rep[3]); // Uncomment this and parse the string to int
}

Upvotes: 0

Thomas
Thomas

Reputation: 12019

You already add to your List the PlaycountData object, which looks fine. What you need is to construct the object in the right way.

This line

//this.playcount = rep[3];

should probably then read

this.playcount = Integer.parseInt(rep[3]);

Upvotes: 0

Peter Lawrey
Peter Lawrey

Reputation: 533560

Try converting the String to an int.

this.playcount = Integer.parseInt(rep[3]);

Upvotes: 1

Related Questions