<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>javahints &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<atom:link href="https://www.oscarblancarteblog.com/tag/javahints/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oscarblancarteblog.com</link>
	<description>Software Architect &#38; FullStack developer</description>
	<lastBuildDate>Sun, 02 Aug 2020 22:37:25 +0000</lastBuildDate>
	<language>es-MX</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.11</generator>

<image>
	<url>https://www.oscarblancarteblog.com/wp-content/uploads/2019/03/cropped-ob-32x32.png</url>
	<title>javahints &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<link>https://www.oscarblancarteblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">89905023</site>	<item>
		<title>Ordenar Listas en Java</title>
		<link>https://www.oscarblancarteblog.com/2017/02/28/ordenar-listas-en-java/</link>
					<comments>https://www.oscarblancarteblog.com/2017/02/28/ordenar-listas-en-java/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 28 Feb 2017 09:00:26 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[javahints]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=1451</guid>

					<description><![CDATA[<p>Si eres programador seguramente te has encontrado con el problema de Ordenar Listas, pero ¿Estamos utilizando la solución correcta o estamos reinventando la rueda? Pues en este artículo hablaremos de las formas estándares que ofrece Java para ordenar listas sin tener que programar más de lo requerido. Básicamente Java ofrece dos interfaces que serán claves [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/02/28/ordenar-listas-en-java/">Ordenar Listas en Java</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" class="alignleft wp-image-594 size-thumbnail" src="https://www.oscarblancarteblog.com/wp-content/uploads/2014/07/google-oracle-java1-150x150.jpg" alt="Ordenar Listas en Java" width="150" height="150" />Si eres programador seguramente te has encontrado con el problema de Ordenar Listas, pero ¿Estamos utilizando la solución correcta o estamos reinventando la rueda? Pues en este artículo hablaremos de las formas estándares que ofrece Java para ordenar listas sin tener que programar más de lo requerido.</p>
<p>Básicamente Java ofrece dos interfaces que serán claves para realizar un ordenamiento simple, las cuales son <span class="lang:java decode:true crayon-inline">Comparator</span>  y <span class="lang:java decode:true crayon-inline">Comparable</span>, estas dos interfaces atienden contextos diferentes en el ordenamiento de las listas, pues existen dos escenarios concretos (Si ya conoces la teoría puedes brincarte a la última sección):</p>
<p><span id="more-1451"></span></p>
<h2>Objetos preparados para ser Ordenados</h2>
<p>El escenario más simple para ordenar un Lista, es cuando sus elementos están preparados para ser ordenados, esto implica que los elementos de la lista implementan la interface <span class="lang:java decode:true crayon-inline ">Comparable</span>. Al implementar esta interface, las clases deberá implementar el método <span class="lang:java decode:true crayon-inline ">public interface Comparable&lt;T&gt;</span>, el cual sirve para comprar un objeto contra otro, este método recibe como parámetro otro objeto, el cual utilizaremos para comprarlo contra el actual para responder con un entero, el cual deberá ser:</p>
<ul>
<li>&lt; 0 (Menor que cero): cuando el objeto actual es menor que el otro</li>
<li>= 0 (Igual a cero): cuando los objetos son iguales</li>
<li>&gt; 0 (Mayor que cero): cuando el otro objeto es mayor.</li>
</ul>
<p>Cuando una clase implementa <span class="lang:java decode:true crayon-inline ">Comparable</span> entonces podemos decir que está preparada para ser Ordenada y ordenarla será tan simple como hacer lo siguiente:</p>
<p>Collections.sort(lstSortEmployees);</p>
<p>Asumiendo que la variable <span class="lang:java decode:true crayon-inline ">lstSortEmployees</span> es una lista de objetos que implementan <span class="lang:java decode:true crayon-inline ">Comparable</span>.<!--more--></p>
<h2>Objetos que no están preparados para ser Ordenados</h2>
<p>Por otra parte, las clases que no implementan <span class="lang:java decode:true crayon-inline ">Comparable</span> no podrán ser ordenadas de forma natural, por lo que tendremos que recurrir a la interface <span class="lang:java decode:true crayon-inline ">Comparator</span>, la cual sirve para crear una clase externa que ayude al ordenamiento de los Objetos sin modificar la estructura de las clases existentes. Para lo cual será necesario crear una nueva clase que implementa la interface <span class="lang:java decode:true crayon-inline ">Comparator</span> y con ello el método <span class="lang:java decode:true crayon-inline ">int compare(T o1, T o2)</span>, el cual funciona exactamente igual que el de la interface <span class="lang:java decode:true crayon-inline ">Comparable</span>, solo que este recibe como parámetros los dos objetos que será comparados.</p>
<p>Ahora bien, si queremos ordenar una lista mediante este método podríamos hacerlo de la siguiente manera:</p>
<pre class="lang:java decode:true ">Collections.sort(lstEmployees, new EmployeeComparator());</pre>
<p>Donde <span class="lang:java decode:true crayon-inline ">lstEmployees</span> es la lista de objetos a ordenar y <span class="lang:java decode:true crayon-inline ">EmployeeComparator</span> es una clase que implementa <span class="lang:java decode:true crayon-inline ">Comparator</span>. Aunque también podríamos ahorrarnos la creación de una nueva clase y crear una clase anónima, como podemos ver a continuación:</p>
<pre class="tab-convert:true lang:java decode:true">Collections.sort(lstEmployees, new Comparator&lt;Employee&gt;(){

    @Override
    public int compare(Employee o1, Employee o2) {
        return o1.getName().compareToIgnoreCase(o2.getName());
    }
});</pre>
<p>Veamos que este último ejemplo instanciamos la interface <span class="lang:java decode:true crayon-inline">Comparator</span> al vuelo y definimos el método <span class="lang:java decode:true crayon-inline ">compare</span> para determinar cuál empleado es mayor que cual.</p>
<p>Finalmente, Java 8 ofrece una forma muchos más simple de ordenar los objetos utilizado Lamba Expresión, por lo cual en lugar de crear un <span class="lang:java decode:true crayon-inline ">Comparator</span>, solo definimos la estrategia para comparar los objetos, veamos cómo quedaría:</p>
<pre class="lang:java decode:true ">Collections.sort(lstEmployees, (x, y) -&gt; x.getName().compareToIgnoreCase(y.getName()));</pre>
<p>Mediante lamba expresión definimos solamente como los objetos deberán ser comparados.</p>
<h2>Un ejemplo práctico:</h2>
<p>Muy bonita la explicación, pero pasemos mejor a un ejemplo práctico. Vamos a ver un ejemplo rápido para realizar los 3 tipos de ordenamientos que vimos anteriormente. Todo el código fuente lo puedes encontrar el GiHub: <a href="https://github.com/oscarjb1/SortList.git">https://github.com/oscarjb1/SortList.git</a></p>
<pre class="lang:java decode:true" title="SortMain.java">package com.osb.sortlist;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author Oscar Blancarte &lt;oscarblancarte3@gmail.com&gt;
 */
public class SortMain {

    private static final String[] NAMES = new String[]{
        "Oscar Blancarte",
        "Juan Perez",
        "Gabriel German",
        "Liliana Castro",
        "Alfredo Alvarado",
        "Rebeca Hernandez",
        "Sofia Galindo",
        "Samuel Alvarez",
        "Manuel Orozco"
    };

    public static void main(String[] args) {

        //Ordenar empleados que estan preparados para ser ordenados
        List&lt;SortEmployee&gt; lstSortEmployees = getSorteableEmployeeList();
        Collections.sort(lstSortEmployees);
        printList("lstSortEmployess ==&gt;", lstSortEmployees);

        //Ordenar empleados que no estan preparados para ser ordenados
        List&lt;Employee&gt; lstEmployees = getEmployeeList();
        Collections.sort(lstEmployees, new Comparator&lt;Employee&gt;(){
            @Override
            public int compare(Employee o1, Employee o2) {
                return o1.getName().compareToIgnoreCase(o2.getName());
            }
        });
        printList("lstEmployees ==&gt;", lstEmployees);

        //Ordenas Empleados con Lambda Expresion
        Collections.sort(lstEmployees, (x, y) -&gt; x.getName().compareToIgnoreCase(y.getName()));
        printList("lstEmployees Lambda ==&gt;", lstEmployees);
    }

    private static void printList(String title, List list) {
        System.out.println(title);
        list.forEach(x -&gt; System.out.println("\t" + x.toString()));
        System.out.println("");
    }

    private static List&lt;Employee&gt; getEmployeeList() {
        List&lt;Employee&gt; employees = new ArrayList&lt;&gt;();
        for (String name : NAMES) {
            employees.add(new Employee(name));
        }
        return employees;
    }

    private static List&lt;SortEmployee&gt; getSorteableEmployeeList() {
        List&lt;SortEmployee&gt; employees = new ArrayList&lt;&gt;();
        for (String name : NAMES) {
            employees.add(new SortEmployee(name));
        }
        return employees;
    }
}</pre>
<p>La siguiente clase representa un empleado que no está preparado para ser ordenado:</p>
<pre class="tab-convert:true lang:java decode:true">package com.osb.sortlist;

/**
 * @author Oscar Blancarte &lt;oscarblancarte3@gmail.com&gt;
 */
public class Employee {
    private String name;
    
    public Employee(){
    }

    public Employee(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return name;
    }
}</pre>
<p>Este otro empleado si está preparado para ser ordenado:</p>
<pre class="tab-convert:true lang:java decode:true">package com.osb.sortlist;

/**
 * @author Oscar Blancarte &lt;oscarblancarte3@gmail.com&gt;
 */
public class SortEmployee implements Comparable&lt;SortEmployee&gt; {
    
    private String name;

    public SortEmployee( String name) {
        this.name = name;
    }

    @Override
    public int compareTo(SortEmployee employee1) {
        return this.name.compareToIgnoreCase(employee1.name);
    }

    @Override
    public String toString() {
        return name;
    }
}</pre>
<p>El resultado de la ejecución del proyecto nos da el siguiente resultado:</p>
<pre class="tab-convert:true lang:java decode:true">lstSortEmployess ==&gt;
    Alfredo Alvarado
    Gabriel German
    Juan Perez
    Liliana Castro
    Manuel Orozco
    Oscar Blancarte
    Rebeca Hernandez
    Samuel Alvarez
    Sofia Galindo

lstEmployees ==&gt;
    Alfredo Alvarado
    Gabriel German
    Juan Perez
    Liliana Castro
    Manuel Orozco
    Oscar Blancarte
    Rebeca Hernandez
    Samuel Alvarez
    Sofia Galindo

lstEmployees Lambda ==&gt;
    Alfredo Alvarado
    Gabriel German
    Juan Perez
    Liliana Castro
    Manuel Orozco
    Oscar Blancarte
    Rebeca Hernandez
    Samuel Alvarez
    Sofia Galindo</pre>
<p>Como puedes ver, estamos realizando tres ordenamientos, el primero es con una lista de <span class="lang:java decode:true crayon-inline ">SortEmployee</span>, el segundo ordenamiento es con una lista de <span class="lang:java decode:true crayon-inline ">Employee</span>, y la tercera es utilizando lamba expresión.</p>
<figure id="attachment_3213" aria-describedby="caption-attachment-3213" style="width: 800px" class="wp-caption aligncenter"><a href="https://codmind.com/courses/java"><img loading="lazy" class="wp-image-3213 size-full" src="https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md.jpg" alt="" width="800" height="450" srcset="https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md.jpg 800w, https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md-300x169.jpg 300w, https://www.oscarblancarteblog.com/wp-content/uploads/2020/08/java-core-banner-3-md-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></a><figcaption id="caption-attachment-3213" class="wp-caption-text">Te invito a que veas mi curso de Java Core, en el cual enseñamos Java desde cero con las mejores prácticas y un proyecto final.</figcaption></figure>
<p>Espero que esta explicación sea lo suficientemente clara como para aclarar cualquier duda que tuvieras, pero si no es así, recuerda que puedes escribirme en los comentarios y con gusto te responderé.</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2017/02/28/ordenar-listas-en-java/">Ordenar Listas en Java</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2017/02/28/ordenar-listas-en-java/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1451</post-id>	</item>
	</channel>
</rss>
