Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

KatyaMarincheva avatar KatyaMarincheva 572 Точки

[Java] Advanced C# Exam 31.05.2015 Command Enterpreter - sorting String list/array дава различен резултат в C# и Java

Здравейте, колеги,

Да сте забелязали в задачата Command Enterpreter, че sorting List<String> дава различен резултат в C# и Java?

(Същото при String array, разбира се)

И затова ми гърмеше предпоследния тест. По условие трябва сортирането да дава a A b B и т.н., а Java сортерите дават A B a b (извеждат първо всички главни букви).

Та си направих ето този custom sorter, който сортира точно като в C#:

public static void sortListOfStrings(List<String> list)
{
    for(int j=0; j< list.size();j++)
    {
        for (int i=j+1 ; i< list.size(); i++)
        {
            if(list.get(i).compareToIgnoreCase(list.get(j))<0
                    || (list.get(i).compareToIgnoreCase(list.get(j))==0 && list.get(i).compareTo(list.get(j))>0))
            {
                String temp= list.get(j);
                list.set(j, list.get(i));
                list.set(i, temp);
            }
        }
    }
}

Ta въпросът ми е, на изпита като се каже sorted alphabetically - кое от двете сортирания ще се има предвид в Java:

Comparator.<String>naturalOrder()

или нещо от рода на това дето си го написах, та да сортира alphabetically?

Благодаря, предварително,

Катя

2
Java Advanced 04/10/2015 13:18:53
LoKSET avatar LoKSET 160 Точки

Здравей, не можах да намеря вграден начин, който да доведе до C# сортирането - като гледам Java използва това, което при C# се получава ако се зададе

strings.Sort(StringComparer.Ordinal);

Има

Collections.sort(strings, String.CASE_INSENSITIVE_ORDER);

но то също не прави точно това, така че твоят вариант си остава (макар, че сега като се замисля сортирането в C# е малко странно как подрежда нещата).

Ето го същото като ламбда, доста по-кратко се получава.

Collections.sort(strings, (x, y) -> x.compareToIgnoreCase(y) == 0 ? -x.compareTo(y) : x.compareToIgnoreCase(y));

На изпита нямам идея какво точно ще очакват, но би трябвало или да е уточнено или да кажат допълнително.

0
04/10/2015 12:53:37
Filkolev avatar Filkolev 4482 Точки

Изпитът е по джава, съответно задачите ще са писани за джава. Никой няма да реши да се мъчи да преписва задача, която е писана за C# и да я модифицира за джава, само за да ви е гадно да измислите начин да се преборите с разликите в някои от вградените методи на двата езика. Джава сама по себе си е достатъчно предизвикателство (както за пореден път се убедих вчера докато разучавах регекса там). 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.