Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° J2MeΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 33

Автор Автор нСизвСстСн

display.setCurrent (a, AddressBookMain.get Instance ());

})

catch (RecordStoreException re)

re.printStackTrace(); Alert a = new Alert("Error retrieving record",

"Error retrieving record.", AlertType.CONFIRMATION);

a. setTimeout(Alert.FOREVER); display.setCurrent (a, this);

catch (lOException ioe)

}

ioe.printStackTrace();

}

finally

{

return numRecords;

{

public void coramandAction(Command c, Displayable d)

if (c == back)

AddressBookMain.getlnstancel). display ();

}

}

}


ΠœΠ΅Ρ‚ΠΎΠ΄ buildRecordList() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ составлСниС списка для получСния всСх записСй, хранящихся Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ записСй, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ список всСх ΠΈΠΌΠ΅Π½. Π’Ρ‹Π·ΠΎΠ² enumerateRecords () Π²Ρ‹Π΄Π°Π΅Ρ‚ RecordEnumeration, содСрТащий всС записи. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² hasNextRecord() ΠΈ nextRecord() Ρ†ΠΈΠΊΠ» while просто ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи ΠΈ добавляСт ΠΈΡ… Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ List для отобраТСния.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ массив ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Ρ‚ΠΎΠΌΡƒ процСссу, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ создали запись Ρ€Π°Π½Π΅Π΅. Π’Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, имя, являСтся string, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· Π±Π°ΠΉΡ‚ΠΎΠ² Π² String. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π° ΠΆΠ΅ самая ΠΈΠ΄ΠΈΠΎΠΌΠ° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ здСсь для создания DatalnputStream, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ API для Π»Π΅Π³ΠΊΠΎΠ³ΠΎ прСобразования встроСнных Ρ‚ΠΈΠΏΠΎΠ² Java.


Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ записСй

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ осущСствляСт поиска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… записСй. Однако сущСствуСт способ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ списки для извлСчСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ подмноТСства записСй Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ списки для Π²Ρ‹Π²ΠΎΠ΄Π° записСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ критСриям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ enumerateRecords() ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ записСй. Π€ΠΈΠ»ΡŒΡ‚Ρ€ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ сСмантику соотвСтствия записи Π½Π°Π±ΠΎΡ€Ρƒ ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠ΅Π², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Π΄ΠΎΠ»ΠΆΠ½Π° Π»ΠΈ запись Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² Π½Π°Π±ΠΎΡ€ списка.

Π€ΠΈΠ»ΡŒΡ‚Ρ€ записСй являСтся классом, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΌ интСрфСйс RecordFilter, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСтся Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ javax.microedition.rms. Π­Ρ‚ΠΎΡ‚ интСрфСйс опрСдСляСт СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄ boolean matches (byte [] candidate). Π’Π°Ρˆ подкласс RecordFilter Π·Π°Π΄Π°Π΅Ρ‚ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ устанавливаСт ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ записСй, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² спискС всСх записСй Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° записСй. ΠœΠ΅Ρ‚ΠΎΠ΄ enumerateRecords() Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Π°ΡˆΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° записСй.

Π’ листингС 7.3 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ΄ класса SearchScreen. Java. Он ΠΈΡ‰Π΅Ρ‚ записи, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с подстроки, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈΠ»ΠΈ эквивалСнтныС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ строкС.


Листинг 7.3. Поиск ΠΈΠΌΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с подстроки, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ API Π² классС AddressBook, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΌ сСмантику поиска


import javax.microedition.lcdui.Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Form;

import javax.microedition.lcdui.TextField;

import javax.microedition.rms.RecordEnumeration;

import javax.microedition.rms.RecordStoreException;

import Java.util.Enumeration;

import Java.util.Vector;

/**


Π­Ρ‚ΠΎΡ‚ класс внСдряСт экран, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… записСй Π² адрСсной ΠΊΠ½ΠΈΠ³Π΅. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚ имя ΠΈΠ»ΠΈ прСфикс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт имя ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… записСй Π² адрСсной ΠΊΠ½ΠΈΠ³Π΅.


*/

public class SearchScreen extends Form

implements CommandListener

{

private static Command go =

new Command("Go", Command.SCREEN, 1);

private static Command back = new Command("Back", Command.BACK, 1);

private static SearchScreen instance; private Display display;

private AddressBookMain addressBook; private TextField keyEntry;

/**


ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€.


*/

public SearchScreen(}

(

super("Search for entry");

instance = this;

PersistenceDerao pDemo = PersistenceDemo.getlnstance ();

display = Display.getDisplay (pDerno);

addressBook = AddressBookMain.getlnstance ();

keyEntry = new TextField("Enter name",

null, 20, TextFieid.ANY); append(keyEntry);

addCommand(go); addCommand(back);

setCoramandListener(this);

}

/**


Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.

Π’Ρ‹Π·ΠΎΠ² Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎ создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ.

/**

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса.


**/

public static SearchScreen getlnstance ()

return instance;) void display!)

(display.setCurrentlthis);

}

/**


ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° экран.

На самом Π΄Π΅Π»Π΅ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ обязанности ΠΏΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… экзСмпляру SearchResultScreen. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΎΠ΄Π½Π°ΠΊΠΎ, устанавливаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр Π΄Π°Π½Π½ΠΎΠ³ΠΎ класса Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π—Π°Ρ‚Ρ€Π°Ρ‚Π° выраТаСтся Π² Vector записСй ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° записСй адрСсной ΠΊΠ½ΠΈΠ³ΠΈ.


*/

void displaySearchResults(Vector results)

SearchResultScreen screen =

new SearchResultScreen (results);

display. setCurrenJ: (screen);

)


Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ записСй, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ.

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ ΠΎΡ‚Π±ΠΎΡ€Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ запись Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΈ, Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² TextField Β«keyEntryΒ». Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ задСйствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ AddressBook.getMatchesByName() для примСнСния ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ соотвСтствиС этого ΠΈΠΌΠ΅Π½ΠΈ.


*/

Vector buildSearchResults()

{

AddressBook addressBook =

AddressBookMain.getInstance(). getAddressBook();

String matchKey = keyEntry.getString(); Vector results = new Vector();

try

{

RecordEnuraeration re =

addressBook.getMatchesByName(matchKey);

byte [] record = null;

while (re.hasNextElement())

record = re.nextRecord (); results.addElement(record);

}

}

catch (RecordStoreException rse)

}

rse.printStackTracet);

)

return results;

)

/**


Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΈΡ… Π½Π° экранС.


class BuildSearchResultsAction implements Runnable

{

public void run ()

Vector results = buildSearchResults ();

displaySearchResults(results);

}

}

public void commandAction(Command c, Displayable d);

if (c == go)

Runnable action = new BuildSearchResultsAction();

action.run ();

)

else if (c == beck)

}

AddressBookMain.getInstanced.display!);

}

}

}


ΠœΠ΅Ρ‚ΠΎΠ΄ buildSearchResults() Π² классС SearchScreen ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ список записСй, вызывая ΠΌΠ΅Ρ‚ΠΎΠ΄ getMatchesByName (String matchKey) Π² классС AddressBook. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ записи для Π²Ρ‹Π²ΠΎΠ΄Π° лишь Ρ‚Π΅Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ начинаСтся с matchKey.

ΠœΠ΅Ρ‚ΠΎΠ΄ getMatchesByName () выполняСт эту Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡŽ, пСрСсылая Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ записСй ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ enumerateRecords (). ЭкзСмпляр MatchAllNamesFilter опрСдСляСт сСмантику Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° для нахоТдСния всСх записСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с подстроки matchKey.

ΠœΠ΅Ρ‚ΠΎΠ΄ enumerateRecords () обращаСтся ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅:

boolean matches(byte [] candidate)

Если Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выводится true, ΠΎΠ½ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ эту запись Π² Π½Π°Π±ΠΎΡ€ списка. ВСорСтичСски это сходно с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ запроса SQL Π² систСмС родствСнных Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ RecordFilter опрСдСляСт ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΈ поиска.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² листингС 7.2 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ RecordFilter Π±Ρ‹Π» Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ класс RecordList ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти всС записи Π² спискС, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π½Π΅ примСняСтся.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ нСсколько Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ поиска ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ критСриям. БлСдуя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ листинга 7.4, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ нСсколько Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… классов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ RecordFilter ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ осущСствляСмому поиску.


ΠšΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ записСй

Π’Ρ‹, нСсомнСнно, Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, пСрСсланный Π² enumerateRecords () Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Π±Ρ‹Π» Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ. Π­Ρ‚ΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ являСтся Β«Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»Π΅ΠΌΒ» для ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π° записСй. ΠšΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ записСй β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сравниваСт Π΄Π²Π΅ записи для опрСдСлСния ΠΈΡ… упорядочивания ΠΈΠ»ΠΈ сортировки. ΠšΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ прилоТСниям Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ сортировку.

Как ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹, ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ сСмантику Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сравнСния. ΠšΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ записСй являСтся Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ интСрфСйса RecordComparator, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт СдинствСнный ΠΌΠ΅Ρ‚ΠΎΠ΄

int ccmparefbyte [] recordl, byte [] record2)

ΠšΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΊΠΆΠ΅ опрСдСляСт Ρ‚Ρ€ΠΈ константы, описанныС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ 7.1, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ваша рСализация Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ значСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.


Π’Π°Π±Π»ΠΈΡ†Π° 7.1. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹ RecordComparator


ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Π° β€” ОписаниС

public static int EQUIVALENT β€” Π”Π²Π΅ записи эквивалСнтны Π² соотвСтствии с сСмантикой сравнСния

public static int FOLLOWS β€” Π—Π°ΠΏΠΈΡΡŒ 1 «большС», Ρ‡Π΅ΠΌ запись 2, Π² соотвСтствии с сСмантикой сравнСния

public static int PRECEDES β€” Π—Π°ΠΏΠΈΡΡŒ 1 «мСньшС», Ρ‡Π΅ΠΌ запись 2, Π² соотвСтствии с сСмантикой сравнСния


ИдСя использования ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сходна с понятиСм Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ записСй. Π’Ρ‹ опрСдСляСтС класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс javax.microedition.rras.RecordComparator. Π’Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ экзСмпляр Π² Π²Ρ‹Π·ΠΎΠ² enumerateRecords (). Записи, ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° записСй, ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ, ΠΏΠΎ Π΄Π²Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² соотвСтствии с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ сравнСния. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ записи ΠΈΠ· списка Π² порядкС, опрСдСляСмом ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

Π’ листингС 7.4 дСмонстрируСтся использованиС ΠΊΠΎΠΌΠΏΠ°Ρ€Π°Ρ‚ΠΎΡ€Π° записСй. Он опрСдСляСт Π½ΠΎΠ²Ρ‹ΠΉ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс класса AddressBook, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² листингС 7.1. Новый Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ класс AlphabeticalOrdering Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ RecordComparator. Π•Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ сравнСния ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ массива ΠΈ сравниваСт ΠΈΡ… лСксикографичСски (ΠΏΠΎ словам).