AndroidCoder
AndroidCoder

Reputation: 2735

Finding common between Array-list of Strings

I've array-list "mArrayListvarinats" of String which contains pipe separated strings like

225356175|225356176|225356177|225356178|225356179|225356180|225356181|225356182|225356183|225356184|225356185|225356186|225356187|225356188|225356189|225356190|225356191|225356192

The size of mArrayListvarinats may be 0 upto n Now I want to find out common string between those Strings from mArrayListvarinats.

for ex. if it's size is two the code may be like as follows.

String temp[] = mArrayListvarinats.get(0).split("\\|");
String temp1[] = mArrayListvarinats.get(1).split("\\|");

and then loop will work on both the arrays to get common one.But how to achieve it for any no of size inside the loop as those temp arrays will be generated in the loop on mArrayListvarinats?

Upvotes: 1

Views: 1270

Answers (7)

Shishir Kumar
Shishir Kumar

Reputation: 8201

Below code will return you the frequency of each string present in the array.

public static void main(String[] args) {
        String mArrayListvarinats = "225356175,225356176,225356177,225356178,225356179,225356180,225356181,225356182,225356183,225356184,225356185,225356186,225356187,225356188,225356189,225356190,225356191,225356192,225356192";
        List<String> list = Arrays.asList(mArrayListvarinats.split(","));
        Set<String> uniqueWords = new HashSet<String>(list);
        for (String word : uniqueWords) {
            System.out.println(word + ": " + Collections.frequency(list, word));
        }
    }

String with frequency more than 1 are duplicates/common. You can take actions based on frequency.

Upvotes: 0

er_suthar
er_suthar

Reputation: 321

This will find common among all your lists.

List<String> common = Arrays.asList(mArrayListvarinats.get(0).split("\\|"));
for(String varinats: mArrayListvarinats){
List<String> items = Arrays.asList(varinats.split("\\|"));
common = ListUtils.intersection(items,common);
}

But for this you have to use Apache commons collection library , which I hope is not a issue for you :)

Upvotes: 0

Parth Bhagat
Parth Bhagat

Reputation: 509

If you are only interested in getting common strings found in mArrayListvarinats variable, then you should use Set data structure. Set in java will only contain unique entries. From the example strings it sounds that you are collecting string which has numeric values. So there won't be any problem due to that. But if you are collecting alpha numeric value then you need to take care of alphabet's case, as Set collects values which are case sensitive. So for Set A is not equal to a.

Upvotes: 0

Harmlezz
Harmlezz

Reputation: 8068

Try this short version:

public static void main(String[] args) {
    List<String> a = new ArrayList<>(asList("225356176|225356177|225356178".split("\\|")));
    List<String> b = new ArrayList<>(asList("225356175|225356176|225356177".split("\\|")));
    a.retainAll(b);
    b.retainAll(a);
    System.out.println(b);
}

OUTPUT:

[225356176, 225356177]

Upvotes: 1

Gladhus
Gladhus

Reputation: 920

Something like this should work :

HashSet<String> allStrings = new HashSet<String>();
HashSet<String> repeatedStrings = new HashSet<String>();

for(String pipedStrings: mArrayListvarinats){
    String temp[] = pipedStrings.split("\\|");
    for(String str : temp){
        if(!allStrings.add(str)){
            repeatedStrings.add(str);            
        }
    }
}

This way, you will have your HashSet allStrings that contains all your unique strings. And the other HashSet repeatedStrings which contains all the strings that appears more than once.

Upvotes: 1

Dushyant Gupta
Dushyant Gupta

Reputation: 515

Set<String> set=new HashSet<String>();
for (int i = 0; i < temp.length; i++) {
    set.add(str[i]);
}
for (int i = 0; i < temp1.length; i++) {
    set.add(str1[i]);
}

The set will contain common strings.

Upvotes: 0

gandharva
gandharva

Reputation: 691

Iterate through each of them and put them in a HashSet. If you get false while adding it means it's already there. You can put it in a separate Hashset. this way you will get a hashset of all unique string and an another hashset of strings that occured multiple times

Upvotes: 0

Related Questions