Java Comparable Interface

Java permite comparar valores primitivos usando os operadores <, <=, >, >=, ==, !=.

Mas para comparar objetos esses operadores não são suportados e uma abordagem diferente deve ser utilizada.

Como comparar dois objetos do tipo Task em um sistema de gerenciamento de tarefas simples. Java permite a comparação de objetos utilizando a interface Comparable. Após definir como comparar os objetos é bem simples ordenar a list de tasks utilizando a função sort das classes Collections ou Arrays.

Collections.sort(tasks);
Arrays.sort(tasks);

Por padrão uma classe não implementa a interface Comparable. Para tornar a classe comparável é necessário implementar a interface Comparable e sobre-escrever o método compareTo().

O método compareTo() define como os objetos serão comparados entre eles. Veja a definição da interface Comparable.

public interface Comparable {
    public int compareTo(T o);
}

O método compareTo() retorna um valor inteiro que define se o objeto e menor que, igual ou maior que o outro objeto.

  • Negativo – Indica o objeto é menor que o outro.
  • Zero – Indica que o objeto é igual ao outro.
  • Positivo – Indica que o objeto é maior que o outro.

Java possui muitas classes que implementam a interface Comparable tais como String, Integer, Date, Calendar e muitas outras. Assim garantindo a ordem dos objetos.

Exemplo

O exemplo mostra como implementar a interface Comparable para uma determinada classe e como definir o método compareTo() para comparar dois objetos diferentes.

No exemplo o atributo priority será comparado utilizando o método compareTo() definido na classe Integer.


import java.util.Date;
import java.util.Objects;
import java.util.UUID;

public class Task implements Comparable {

    private String id;
    private String name;
    private String description;
    private Integer priority;
    private Date created;
    private Status status;

    public Task() {
    }

    public Task(String name, Integer priority) {
        this.id = UUID.randomUUID().toString();
        this.name = name;
        this.priority = priority;
        this.created = new Date();
    }
    
    // The Getters and Setters were omitted

    public int compareTo(Task anotherTask) {
        return this.priority.compareTo(anotherTask.priority);
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Task task = (Task) o;
        return id.equals(task.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "{name=" + name + ", priority=" + priority +"}";

    }
}

O método compareTo() podería ter sido implementado como o mostrado abaixo.

@Override
public int compareTo(Task anotherTask) {
   if(this.priority < anotherTask.getPriority()) {
       return -1;
   }
   if(this.priority > anotherTask.getPriority()) {
       return 1;
   }
   return 0;
}

O código abaixo mostra como ordenar uma lista de Tasks baseado na definição do método compareTo() da classes Task.

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

public class ComparableTest {

    public static void main(String[] args) {

        List listOfTasks = new ArrayList<>();
        listOfTasks.add(new Task("Task 1", 1));
        listOfTasks.add(new Task("Task 2", 3));
        listOfTasks.add(new Task("Task 3", 2));
        listOfTasks.add(new Task("Task 4", 5));


        System.out.println("Before Sort");
        System.out.println(listOfTasks);

        Collections.sort(listOfTasks);

        System.out.println("After Sort");
        System.out.println(listOfTasks);
    }
}
# output:

Before Sort
[{name=Task 1, priority=1}, {name=Task 2, priority=3}, {name=Task 3, priority=2}, {name=Task 4, priority=5}]

After Sort
[{name=Task 1, priority=1}, {name=Task 3, priority=2}, {name=Task 2, priority=3}, {name=Task 

Worpress com AWS Lightsail

Amazon Lightsail é uma forma bem simples e de baixo custo de instalar um blog Worpress. A instalação é bem rápida e leva mais ou menos 10 minutos e isso tudo pagando menos de $5 USD por mês. O Lightsail é bem simples “next-next-finish” ou “click solution”, é muito fácil instalar uma aplicação como WordPress, Magento, Nginx ou simplesmente um servidor Linux ou Windows.

Planos a partir de $3.50 USD, para um servidor com 512MB de memória, 1vCPU e com 20GB de espaço de armazenamento, com acesso total sobre instância e com SSH disponível. É também possível criar novas instâncias a partir de snapshots.

Passo a passo de Instalação

1 – Selecione a região da instância

2 – Selecione o Sistema Operacional entre Linux e Windows

3 – Selecione a aplicação

4 – Selecione o plano

5 – Defina o nome e tags para a instância

Esse processo levará alguns minutos. AWS está provisionando sua nova instância com as configurações selecionadas.

6 – Conectando em sua instância através de SSH

É bem fácil conectar na instância usando um terminal SSH, através de seu navegador. Basta clicar no botão “Connect using SSH” e uma nova janela se abrirá com o terminal SSH conectado. O comando abaixo irá exibir a senha de sua nova instância o usuário padrão é “user”

cat bitnami_application_password

O terminal SSH no navegador é bom mas tem limitações. É também bem fácil conectar usando terminal SSH em Mac/Linux ou mesmo no Windows. Para Windows é necessário instalar o Putty, faça o download do certificado para acessar a instância clicando no link.

Para conectar através de SSH é necessário fazer o download do certificado. Não é possível conectar na instância sem o certificado.

Clique no link de download para obter o certificado: um arquivo com nome de LightsailDefaultKey.pem será copiado para sua máquina. Copie esse arquivo para o diretório de sua escolha, para evitar erros é necessário alterar as permissões do arquivo LightsailDefaultKey.pem

The authenticity of host '34.243.143.146 (34.243.143.146)' can't be established.
ECDSA key fingerprint is SHA256:LGI6TDbm4DL+gSpPQXVnU6L2r8zhx59C7+MCs/D0h1A.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '34.243.143.146' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'LightsailDefaultKey-eu-west-1.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'LightsailDefaultKey-eu-west-1.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "LightsailDefaultKey-eu-west-1.pem": bad permissions

O comando abaixo concede as permissões necessárias.

sudo chmod 0644 LightsailDefaultPrivateKey-eu-central-1.pem

Para conectar na instância apenas execute o comando abaixo. Lembre-se de alterar o endereço ip para o ip de sua instância.

ssh bitnami@ip_address -i LightsailDefaultKey-eu-west-1.pem

Acessando o WordPress

Primeiro, obtenha a senha padrão de usuário gerada pela Bitnami. Conecte na instância através do SSH e execute o comando abaixo.

Esse comando irá imprimir a senha do usuário “user”. Agora você pode se conectar no WordPress utilizando as credencias.

cat bitnami_application_password

NÃO SE ESQUEÇA DE ALTERAR A SENHA NO PRIMEIRO ACESSO.

Acesse seu perfil e altere a senha ou crie um novo usuário e remova o usuário “user”, para evitar acessos não autorizados em seu WordPress.

Disabilitando o banner da Bitnami

O banner da Bitnami é exibido na parte inferior direita das páginas. Esse banner irá exibir algumas informações úteis sobre a instalação do seu WordPress.

Acesse sua instância com SSH e execute os comandos abaixo.

sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1
sudo /opt/bitnami/ctlscript.sh restart

Para conectar seu site WordPress a um servidor de domínio, é melhor configurar um IP estático. Selecione a aba “Networking” e clique no botão “Create static IP”.

Conecte em um DNS provider como Hostgator e configure registro.

@ IN A ip_address
www IN ip_address

Sua instâcia de WordPress está configurada e isso não levou nem 10 minutos.