数组排序在Java中使用的比较 [英] Array Sorting Using A Comparator in 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屋!