Avatar billede dark_sun Nybegynder
24. januar 2003 - 15:11 Der er 1 kommentar og
1 løsning

Sortering af ArrayList igen...

Hej igen.
Jeg har lige haft et indlæg om dette, men det virker ikke helt som jeg gerne vil have det til. Til at starte med vil jeg sige at jeg bruger Oracle JDeveloper, når jeg programmere i Java. I kan se min kode ned under. Mit problem er at jeg vil gerne have at min list bliver sorteret efter, hvilken ting man søger efter. Det vil sige, enden typpe, tittel elller codex. Et eksempel kan være typpe. Jeg vil så gerne have at det der kommer ude når jeg søger på typpe bliver sorteret i alfabetisk-orden.

Kode:

public class Frame1 extends JFrame    {
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel jPanel1 = new JPanel();
  JButton jButton1 = new JButton();
  JTextField jTextField1 = new JTextField();
  Krontrol krontrol = new Krontrol();
  FilmenListe list = new FilmenListe();;
  JPanel jPanel2 = new JPanel();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextArea jTextArea1 = new JTextArea();
  JButton jButton2 = new JButton();
  JMenuBar jMenuBar1 = new JMenuBar();
  JMenu jMenu1 = new JMenu();
  JMenu jMenu2 = new JMenu();
  JMenu jMenu3 = new JMenu();
  JMenuItem jMenuItem1 = new JMenuItem();

  /**
  * Constructs a new instance.
  */
  public Frame1() {
    super();
    try  {
      jbInit();

  list.add(new Filmen("The hous of fire","1","hej"));
  list.add(new Filmen("Morten","3","a"));
  list.add(new Filmen("Morten","2","c"));
  list.add(new Filmen("Morten","5","b"));
  list.add(new Filmen("Morten","4","d"));
  list.add(new Filmen("3","3","e"));




  }
    catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
  * Initializes the state of this instance.
  */
  private void jbInit() throws Exception {
    this.getContentPane().setLayout(borderLayout1);
    this.setSize(new Dimension(470, 360));
    jButton1.setText("Søg");
    jButton1.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        jButton1_actionPerformed(e);
      }
    });
    jTextField1.setPreferredSize(new Dimension(82, 20));
    jScrollPane1.setDoubleBuffered(true);
    jScrollPane1.setPreferredSize(new Dimension(200, 260));
    jTextArea1.setPreferredSize(new Dimension(200, 260));
    jButton2.setText("jButton2");
    jButton2.addActionListener(new java.awt.event.ActionListener() {

      public void actionPerformed(ActionEvent e) {
        jButton2_actionPerformed(e);
      }
    });
    jMenuBar1.setBackground(new Color(236, 233, 216));
    jMenu1.setBackground(new Color(236, 233, 216));
    jMenu1.setText("File");
    jMenu2.setBackground(new Color(236, 233, 216));
    jMenu2.setText("Search");
    jMenu3.setBackground(new Color(236, 233, 216));
    jMenu3.setText("Help");
    jMenuItem1.setText("Help Topics");
    this.getContentPane().add(jPanel1, BorderLayout.EAST);
    jPanel1.add(jButton2, null);
    jPanel1.add(jButton1, null);
    jPanel1.add(jTextField1, null);
    this.getContentPane().add(jPanel2, BorderLayout.WEST);
    jPanel2.add(jScrollPane1, null);
    jMenuBar1.add(jMenu1);
    jMenuBar1.add(jMenu2);
    jMenuBar1.add(jMenu3);
    jMenu3.add(jMenuItem1);
    jScrollPane1.getViewport().add(jTextArea1, null);
    jScrollPane1.getViewport();
    this.setJMenuBar(jMenuBar1);
    this.setResizable(false);
  }

  void jButton1_actionPerformed(ActionEvent e)
  {



  Object tal = list.findTyppe(jTextField1.getText());

 
  String text = tal.toString();
  String text1 = jTextField1.getText();

  if(text.indexOf(text1)>-1)
  {
  jTextArea1.setText(tal.toString());
  }
else
{
jTextArea1.setText("Findes ikke i listen");
}
}

import java.util.*;

-----------------------------------------------------------

public class FilmenListe extends ArrayList  {

  /**
  * Constructor
  */

public StringBuffer findTitel(String titel)
  {
  StringBuffer buffer = new StringBuffer();
  Filmen filmen;
  for (int i = 0; i < size(); i++)
  {
  filmen = (Filmen)get(i);
  if(filmen.gettitel().equalsIgnoreCase(titel)) buffer.append(filmen);
  }
  return buffer;
  }

  public StringBuffer findCodex(String codex)
  {
  StringBuffer buffer = new StringBuffer();
  Filmen filmen;
  for (int i = 0; i < size(); i++)
  {
  filmen = (Filmen)get(i);
  if(filmen.getCodex().equalsIgnoreCase(codex)) buffer.append(filmen);
  }
  return buffer;
  }

  public StringBuffer findTyppe(String typpe)
  {
  StringBuffer buffer = new StringBuffer();
  Filmen filmen;
  for (int i = 0; i < size(); i++)
  {
  filmen =(Filmen)get(i);
  if(filmen.getTyppe().equalsIgnoreCase(typpe)) buffer.append(filmen);
  }
  return buffer;
  }
}
-----------------------------------------------------------
public class Filmen {

  private String titel;
  private String codex;
  private String typpe;

  public Filmen(String titel, String codex, String typpe)
  {
  this.titel = titel;
  this.codex = codex;
  this.typpe = typpe;
  }
  public String gettitel()
  {
  return titel;
  }
  public String getCodex()
  {
  return codex;
  }
  public String getTyppe()
  {
  return typpe;
  }
  public String toString()
  {
  return ("Titel:"+titel+"\n"+"Codex:"+codex+"\n"+"Typpe:"+typpe+"\n"+"\n");
  }
}

Håber at der er en der kan hjælpe :-)
Avatar billede soelvpil Nybegynder
24. januar 2003 - 19:18 #1
Lav en klasse, der kan sammenligne film efter deres titel.

public class TitelComparator implements java.util.Comparator {
  public int compare(Object film1, Object film2) {
    String titel1 = ((Filmen) film1).gettitel();
    String titel2 = ((Filmen) film2).gettitel();
    return titel1.compareTo(titel2);
  }
}

Lav tilsvarende klasser,der kan sammenligne på de andre felter.

Hvis du vil sortere din liste efter titel, skriver du så

java.util.Collections.sort(list, new TitelComparator());

som sorterer efter titel. Hvis rækkefølgende bliver den modsatte af, hvad du vil have, skal du i din TitelCOmparator i stedet have

    return titel2.compareTo(titel1);


Helt tilsvarende kalder du sort-metoden med dine andre Comparators, hvis du vil sortere efter en anden attribut.

p.s. I stedet for at rende din liste igennem, når du slår op, kan du evt bruge en Map i stedet. Men hvis listen er kort nok, betyder det selvfølgelig ikke noget.
Avatar billede dark_sun Nybegynder
24. januar 2003 - 22:51 #2
Hej, tak for dit svar. Jeg har dog et problem, jDeveloper vil ikke fungere med den klasse som du forslår. Jeg troer at det mig der har glemt nået. Skal jeg implementere nået i min Filmen-klasse for at det virker, eller skal jeg gøre det i min Sort-klasse. For der sker ikke nået efter String titel1 = ( , det er som om at den ikke ved at den skal compare nået.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester