数组排序在Java中使用的比较 [英] Array Sorting Using A Comparator in Java

查看:130
本文介绍了数组排序在Java中使用的比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有实施比较到我的程序麻烦。

这个程序最初写成如何创建使用摆动菜单的例子。该程序只显示一个菜单,子菜单,其标题,日期和工作室的电影列表。一个更大的数组存储每一部影片,在自己的阵列,其标题,日期和工作室。

现在,我必须找到一个方法来使用比较这些字符串进行排序。事情是这样的:

  Arrays.sort(数据,新的比较<的String []>(){        公众诠释比较(最终的String []取值范,最终的String [] ENTRY2){
            最后弦乐FIELD1 =取值范[0];
            最后弦乐field22 = ENTRY2 [0];
            返回field1.compareTo(场2);
        }
    });

问题是,我从来没有使用一个比较,我也不是一定就如何实现它。

我已经添加源$ C ​​$ C低于原计划。

任何及所有帮助将大大AP preciated。

感谢您。

修改的这一程序类似于从Java教科书的程序,但我们特意叮嘱不是解决在时尚的那种教科书一样。

 进口java.awt中的*。
java.awt.event中导入*。
进口的javax.swing *。
导入的javax.swing.text *。 类MenuExample扩展框架实现的ActionListener
 {
     菜单条毫巴;
     菜单菜单,子菜单;
     菜单项M1,M2,M3,M4,M5;     公共MenuExample()
    {
         的String [] []数据=新的String [] []
         {
             新的String [] {卡萨布兰卡,华纳兄弟,1942年},
             新的String [] {公民凯恩,雷电华电影公司,1941},
             新的String [] {雨中曲,米高梅,1952年},
             新的String [] {绿野仙踪,米高梅,1930年}
         };        //设置框架属性
        的setTitle(AWT菜单); //设置标题
        的setSize(800500); //设置大小框架
        的setLayout(新的FlowLayout()); //设置布局
        调用setVisible(真); //使框架可见
        setLocationRelativeTo(NULL); //中心框架        //创建菜单栏
        毫巴=新的菜单栏();        //创建菜单
        菜单=新的菜单(菜单);        //创建子菜单
        子菜单=新的菜单(子菜单);        //创建的MenuItems
        M1 =新菜单项(菜单项1);
        M2 =新菜单项(菜单项2);
        M3 =新菜单项(菜单项3);        M4 =新菜单项(菜单项4);
        M5 =新菜单项(菜单项5);
        m1.addActionListener(本);        //附加菜单项菜单
        menu.add(M1);
        menu.add(2);
        menu.add(M3);        //附加的菜单项,子菜单
        submenu.add(M4);
        submenu.add(M5);        //附加子菜单
        menu.add(子菜单);        //附加菜单菜单栏
        mbar.add(菜单);        //设置菜单栏框架
        setMenuBar(毫巴);
        JPanel的textPanel =新JPanel();        JTextPane的TEXTAREA =新的JTextPane();
        尺寸textAreaDimensions =新尺寸(100,300);
        textArea.set preferredSize(textAreaDimensions);        //宽:770高度:1000
        JScrollPane的滚动=新JScrollPane的(TEXTAREA,
            JScrollPane.VERTICAL_SCROLLBAR_​​ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_​​ALWAYS);        文档的文档= textArea.getDocument();
        尝试
        {
            的for(int i = 0;我4;;我++)
            {
                为(中间体J = 0; J&下; 3; J ++)
                doc.insertString(doc.getLength(),数据[I] [J] +\\ t的,
                textArea.getStyle(大胆));
                doc.insertString(doc.getLength(),\\ n
                textArea.getStyle(大胆));
            } //结束了        } //结束试        赶上(例外五){}
        textPanel.add(滚动);
        加(textPanel);
        验证();
        重绘();
    } //结束MenuExample    公共静态无效的主要(字符串ARGS [])
    {
        新MenuExample();
    } //主到底    公共无效的actionPerformed(ActionEvent的五)
    {
        的System.out.println(e.getActionCommand());
    } //结束的actionPerformed
} //结束类


解决方案

我只是放在一起这个简单的例子显示使用两种不同的方式比较

 进口java.util.Arrays中;
进口了java.util.Comparator;公共类ArraySort
{
  公共静态无效的主要(字串[] args)
  {
     的String [] []数据=新的String [] []
         {
             新的String [] {卡萨布兰卡,华纳兄弟,1942年},
             新的String [] {公民凯恩,雷电华电影公司,1941},
             新的String [] {雨中曲,米高梅,1952年},
             新的String [] {绿野仙踪,米高梅,1930年},
             新的String [] {OZ的AaaaaThe精灵,米高梅,1943年}
         };     Arrays.sort(数据,新的比较<的String []>(){        @覆盖
        公众诠释比较(最终的String []取值范,最终的String [] ENTRY2){
            最后弦乐FIELD1 =取值范[0];
            最后弦乐场2 = ENTRY2 [0];
            返回field1.compareTo(场2);
        }
     });     打印(数据);     的System.out.println();     Arrays.sort(数据,新SortByDate());     打印(数据);     的System.out.println();     Arrays.sort(数据,新SortByCompany());     打印(数据);
  }  公共静态无效打印(字符串[] []数据){
    对于(String []数组:数据){
      对于(一个String:数组){
        System.out.print(S +);
      }
      的System.out.println();
    }
  }}公共类SortByDate实现比较<的String []> {
  @覆盖
  公众诠释比较(最终的String []取值范,最终的String [] ENTRY2){
    最后弦乐FIELD1 =取值范[2];
    最后弦乐场2 = ENTRY2 [2];
    返回field1.compareTo(场2);
  }
}公共类SortByCompany实现比较<的String []> {
  @覆盖
  公众诠释比较(最终的String []取值范,最终的String [] ENTRY2){
    最后弦乐FIELD1 =取值范[1];
    最后弦乐场2 = ENTRY2 [1];
    返回field1.compareTo(场2);
  }
}

输出:

  OZ米高梅1943年的AaaaaThe向导
卡萨布兰卡华纳兄弟1942年
公民凯恩雷电华电影公司1941年
在雨中米高梅1952年唱着
OZ 1930年米高梅的向导OZ 1930年米高梅的向导
公民凯恩雷电华电影公司1941年
卡萨布兰卡华纳兄弟1942年
OZ米高梅1943年的AaaaaThe向导
在雨中米高梅1952年唱着OZ 1930年米高梅的向导
OZ米高梅1943年的AaaaaThe向导
在雨中米高梅1952年唱着
公民凯恩雷电华电影公司1941年
卡萨布兰卡华纳兄弟1942年

I am having trouble implementing a comparator into my program.

This program was originally written as an example of how to create a menu using swing. The program simply displays a menu, sub menu and a list of movies with their title, date, and studio. A larger array stores each movie, in its own array, with its title, date and studio.

Now, I have to find a way to sort these strings using a comparator. Something like this:

Arrays.sort(data, new Comparator<String[]>() {

        public int compare(final String[] entry1, final String[] entry2) {
            final String field1 = entry1[0];
            final String field22 = entry2[0];
            return field1.compareTo(field2);
        }
    });

Problem is, I have never used a comparator, nor am I sure on how to implement it.

I have added the source code for the original program below.

Any and all help will be greatly appreciated.

Thank you.

Edit This program is similar to a program from a Java textbook, but we are specifically told not to solve the sort in the fashion the textbook does.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;

 class MenuExample extends Frame implements ActionListener
 {
     MenuBar mbar;
     Menu menu,submenu;
     MenuItem m1,m2,m3,m4,m5;

     public MenuExample ()
    {
         String[][] data = new String[][]
         {
             new String[] { "Casablanca", "Warner Brothers", "1942" },
             new String[] { "Citizen Kane", "RKO Pictures", "1941" },
             new String[] { "Singin' in the Rain", "MGM", "1952" },
             new String[] { "The Wizard of OZ", "MGM", "1930"}
         };

        // Set frame properties
        setTitle("AWT Menu"); // Set the title
        setSize(800,500); // Set size to the frame
        setLayout(new FlowLayout()); // Set the layout
        setVisible(true); // Make the frame visible
        setLocationRelativeTo(null);  // Center the frame

        // Create the menu bar
        mbar=new MenuBar();

        // Create the menu
        menu=new Menu("Menu");

        // Create the submenu
        submenu=new Menu("Sub Menu");

        // Create MenuItems
        m1=new MenuItem("Menu Item 1");
        m2=new MenuItem("Menu Item 2");
        m3=new MenuItem("Menu Item 3");

        m4=new MenuItem("Menu Item 4");
        m5=new MenuItem("Menu Item 5");
        m1.addActionListener(this);

        // Attach menu items to menu
        menu.add(m1);
        menu.add(m2);
        menu.add(m3);

        // Attach menu items to submenu
        submenu.add(m4);
        submenu.add(m5);

        // Attach submenu to menu
        menu.add(submenu);

        // Attach menu to menu bar
        mbar.add(menu);

        // Set menu bar to the frame
        setMenuBar(mbar);


        JPanel textPanel = new JPanel();

        JTextPane textArea = new JTextPane();


        Dimension textAreaDimensions = new Dimension(100, 300);
        textArea.setPreferredSize(textAreaDimensions);

        //width: 770 height: 1000
        JScrollPane scroll = new JScrollPane (textArea,
            JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
            JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

        Document doc=textArea.getDocument();
        try
        {
            for(int i=0;i<4;i++)
            {
                for(int j=0;j<3;j++)
                doc.insertString(doc.getLength(),data[i][j]+"\t",
                textArea.getStyle("bold"));
                doc.insertString(doc.getLength(),"\n",
                textArea.getStyle("bold"));
            }//end for

        }//end try

        catch (Exception e) {}
        textPanel.add(scroll);
        add(textPanel);
        validate();
        repaint();
    }//end MenuExample

    public static void main(String args[])
    {
        new MenuExample();
    }//end main

    public void actionPerformed(ActionEvent e)
    {
        System.out.println(e.getActionCommand());
    }//end actionPerformed
}//end class

解决方案

I just put together this simple example to show two different ways of using a Comparator:

import java.util.Arrays;
import java.util.Comparator;

public class ArraySort
{
  public static void main(String[] args)
  {
     String[][] data = new String[][]
         {
             new String[] { "Casablanca", "Warner Brothers", "1942" },
             new String[] { "Citizen Kane", "RKO Pictures", "1941" },
             new String[] { "Singin' in the Rain", "MGM", "1952" },
             new String[] { "The Wizard of OZ", "MGM", "1930"},
             new String[] { "AaaaaThe Wizard of OZ", "MGM", "1943"}
         };

     Arrays.sort(data, new Comparator<String[]>() {

        @Override
        public int compare(final String[] entry1, final String[] entry2) {
            final String field1 = entry1[0];
            final String field2 = entry2[0];
            return field1.compareTo(field2);
        }
     });

     print(data);

     System.out.println();

     Arrays.sort(data, new SortByDate());

     print(data);

     System.out.println();

     Arrays.sort(data, new SortByCompany());

     print(data);
  }

  public static void print(String[][] data){
    for (String[] array : data){
      for (String s : array){
        System.out.print(s + " ");
      }
      System.out.println();
    } 
  }

}

public class SortByDate implements Comparator<String[]>{
  @Override
  public int compare(final String[] entry1, final String[] entry2) {
    final String field1 = entry1[2];
    final String field2 = entry2[2];
    return field1.compareTo(field2);
  }
}

public class SortByCompany implements Comparator<String[]>{
  @Override
  public int compare(final String[] entry1, final String[] entry2) {
    final String field1 = entry1[1];
    final String field2 = entry2[1];
    return field1.compareTo(field2);
  }
}

Output:

AaaaaThe Wizard of OZ MGM 1943 
Casablanca Warner Brothers 1942 
Citizen Kane RKO Pictures 1941 
Singin' in the Rain MGM 1952 
The Wizard of OZ MGM 1930 

The Wizard of OZ MGM 1930 
Citizen Kane RKO Pictures 1941 
Casablanca Warner Brothers 1942 
AaaaaThe Wizard of OZ MGM 1943 
Singin' in the Rain MGM 1952 

The Wizard of OZ MGM 1930 
AaaaaThe Wizard of OZ MGM 1943 
Singin' in the Rain MGM 1952 
Citizen Kane RKO Pictures 1941 
Casablanca Warner Brothers 1942  

这篇关于数组排序在Java中使用的比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆