?
Solved

How do i sort 2 arraylist elements such as these?

Posted on 2009-04-14
14
Medium Priority
?
304 Views
Last Modified: 2012-05-06
1st element : Hello World F 9
2nd element : Holla World M 8
3rd element: Holla holla G 7

I want to sort them based on the numerical values as well as on the 3rd char in the list. can anyone provide me with a working code for this?
0
Comment
Question by:ravivanjani
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 7
14 Comments
 
LVL 86

Assisted Solution

by:CEHJ
CEHJ earned 320 total points
ID: 24140894
Try a Comparator with the following:
public int compare(Object o1, Object o2) {
	String[] a1 = ((String)o1).split(" +");
	String[] a2 = ((String)o2).split(" +");
	int result = a1[2].compareTo(a2[2]);
	if (result == 0) {
		result = Integer.parseInt(a1[3]) - Integer.parseInt(a2[3]);
	}
	return result;
}

Open in new window

0
 

Author Comment

by:ravivanjani
ID: 24140962
Ok the problem is..i dont understand what do i pass in object 1 and object 2 and i do not understand where the string array comesfrom. This is my code. and the actual contents of the file are as such.

Kournikova Anna F F 6-3-1975 Red
Hingis Martina M F 4-2-1979 Green
Seles Monica H F 12-2-1973 Black
package test;
 
import java.util.*;
import java.io.*;
 
public class Testcompare
{
	public List li = new ArrayList();
	public StringBuffer s = new StringBuffer();
	public String b;	
	public void readfiles()
	{
		try
		{	
			BufferedReader br = new BufferedReader(new FileReader("space.txt"));
			BufferedReader br1 = new BufferedReader(new FileReader("comma.txt"));
			BufferedReader br2 = new BufferedReader(new FileReader("pipe.txt"));
			String str = "";
			
			while((str = br.readLine()) != null)
			{
				li.add(str);
			}
			while((str = br1.readLine()) != null)
			{
				b = str.replaceAll(",", "");		
				li.add(b);
			}
			while((str = br2.readLine()) != null)
			{
				b = str.replaceAll("\\|", "");		
				li.add(b);
			}
			
		}
		catch(Exception e)	
		{
			e.printStackTrace();
		}
	}
	public static void main(String[] args)
	{
		Testcompare r = new Testcompare();
		r.readfiles();	
		for(int i = 0; i < r.li.size(); i ++)
		{
			System.out.println(r.li.get(i));
		}
	}
}

Open in new window

0
 
LVL 86

Assisted Solution

by:CEHJ
CEHJ earned 320 total points
ID: 24141012
You would do


Collections.sort(li, new Comparator() {
	public int compare(Object o1, Object o2) {
		String[] a1 = ((String)o1).split(" +");
		String[] a2 = ((String)o2).split(" +");
		int result = a1[2].compareTo(a2[2]);
		if (result == 0) {
			result = Integer.parseInt(a1[3]) - Integer.parseInt(a2[3]);
		}
		return result;
	}
});

Open in new window

0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:ravivanjani
ID: 24141871
what does a1[2] and a2[2] contain though??
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 24141957
The '3rd char in the list'
0
 

Author Comment

by:ravivanjani
ID: 24142009
I did add the code you said to the program but it is giving me exceptions.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 24142126
>>
Kournikova Anna F F 6-3-1975 Red
Hingis Martina M F 4-2-1979 Green
Seles Monica H F 12-2-1973 Black
>>

The above is completely different input to that you posted originally
0
 

Author Comment

by:ravivanjani
ID: 24142228
Ohh yes i apologize...My final input is going to be

Kournikova Anna F F 6-3-1975 Red
Hingis Martina M F 4-2-1979 Green
Seles Monica H F 12-2-1973 Black
Abercrombie Neil Male Tan 2/13/1943
Bishop Timothy Male Yellow 4/23/1967
Kelly Sue Female Pink 7/12/1959
Smith  Steve  D  M  Red  3-3-1985
Bonk  Radek  S  M  Green  6-3-1975
Bouillon  Francis  G  M  Blue  6-3-1975

I want to sort this based on 3 different criteria
gender
date
last name
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 24142296
The data are not arranged properly. e.g.

>>Hingis Martina M F 4-2-1979 Green
>>Abercrombie Neil Male Tan 2/13/1943

have dates and colours in opposite ordering

>>Kelly Sue Female Pink 7/12/1959
>>Hingis Martina M F 4-2-1979 Green

have different gender ordering
0
 

Author Comment

by:ravivanjani
ID: 24142374
That is the way it is. Is there a solution to this?
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 24142763
The best way is to ensure that the data are ordered uniformly
0
 

Author Comment

by:ravivanjani
ID: 24142791
ok i have ordered the data...now the data looks like this

Hingis Martina Female 4/2/1979 Green
Kelly Sue Female 7/12/1959 Pink
Kournikova Anna Female 6/3/1975 Red
Seles Monica Female 12/2/1973 Black
Abercrombie Neil Male 2/13/1943 Tan
Bishop Timothy Male 4/23/1967 Yellow
Bonk Radek Male 6/3/1975 Green
Bouillon Francis Male 6/3/1975 Blue
Smith Steve Male 3/3/1985 Red

How do i sort this data now based on the date? I am unable to do that.
0
 
LVL 86

Assisted Solution

by:CEHJ
CEHJ earned 320 total points
ID: 24143022
OK. Try this
Collections.sort(li, new Comparator() {
	DateFormat df = new SimpleDateFormat("d-M-yyyy");
	public int compare(Object o1, Object o2) {
		Date d1 = null;
		Date d2 = null;
		String[] a1 = ((String)o1).split(" +");
		String[] a2 = ((String)o2).split(" +");
		int result = a1[2].compareTo(a2[2]);
		if (result == 0) {
			try {
				result = df.parse(a1[3]).compareTo(df.parse(a2[3]));
			}
			catch(ParseException e) {
				e.printStackTrace();
			}
			if (result == 0) {
				result = a1[0].compareTo(a2[0]);
			}
		}
		return result;
	}
});

Open in new window

0
 

Accepted Solution

by:
ravivanjani earned 0 total points
ID: 24143113
Thank you. It works fine. I am just trying to figure out a few more things.
Thank you again
0

Featured Post

[Webinar] Lessons on Recovering from Petya

Skyport is working hard to help customers recover from recent attacks, like the Petya worm. This work has brought to light some important lessons. New malware attacks like this can take down your entire environment. Learn from others mistakes on how to prevent Petya like worms.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

For beginner Java programmers or at least those new to the Eclipse IDE, the following tutorial will show some (four) ways in which you can import your Java projects to your Eclipse workbench. Introduction While learning Java can be done with…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
Suggested Courses
Course of the Month9 days, 20 hours left to enroll

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question