Linguagens de programação
Em construção
Paginas:
Em construção
Paginas:
Em construção
# Lista o conteudo do jar
java -jar tf app.jar
# Mostra o conteudo do arquivo manifest
## extrai manifest
java -jar xf app.jar META-INF/MANIFEST.MF
## exibir conteudo
cat META-INF/MANIFEST.MF
# Executa aplicação
java -jar app.jar
package streams;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class MinMax {
public static void main(String[] args) {
Aluno a1 = new Aluno("Ana", 7.1);
Aluno a2 = new Aluno("Luna", 6.1);
Aluno a3 = new Aluno("Gui", 8.1);
Aluno a4 = new Aluno("Gabi", 10);
List<Aluno> alunos = Arrays.asList(a1, a2, a3, a4);
Comparator<Aluno> melhorNota = (aluno1, aluno2) -> {
if(aluno1.nota > aluno2.nota) return 1;
if(aluno1.nota < aluno2.nota) return -1;
return 0;
};
Comparator<Aluno> piorNota = (aluno1, aluno2) -> {
if(aluno1.nota > aluno2.nota) return -1;
if(aluno1.nota < aluno2.nota) return 1;
return 0;
};
System.out.println(alunos.stream().max(melhorNota).get());
System.out.println(alunos.stream().min(piorNota).get());
System.out.println(alunos.stream().min(melhorNota).get());
System.out.println(alunos.stream().max(piorNota).get());
}
}
Metodos uteis - limit / skip / distinct / takeWhile
package streams;
import java.util.Arrays;
import java.util.List;
public class Outros {
public static void main(String[] args) {
Aluno a1 = new Aluno("Ana", 7.1);
Aluno a2 = new Aluno("Luna", 6.1);
Aluno a3 = new Aluno("Gui", 8.1);
Aluno a4 = new Aluno("Gabi", 10);
Aluno a5 = new Aluno("Ana", 7.1);
Aluno a6 = new Aluno("Pedro", 9.1);
Aluno a7 = new Aluno("Gui", 8.1);
Aluno a8 = new Aluno("Maria", 10);
List<Aluno> alunos =
Arrays.asList(a1, a2, a3, a4, a5, a6, a7, a8);
System.out.println("distinct...");
// recuperar os valores distintos (precisa do equals e hash code)
alunos.stream().distinct().forEach(System.out::println);
System.out.println("\nSkip/Limit");
alunos.stream()
.distinct()
.skip(2) // pulo uma quantidade de itens
.limit(2) // limita a quantidade de retorno
.forEach(System.out::println);
System.out.println("\ntakeWhile");
alunos.stream()
.distinct()
.skip(2)
.takeWhile(a -> a.nota >= 7) // retorna ate achar a condição
.forEach(System.out::println);
}
}
Em construção
Em construção
link: Como posso instalar o protobuf no ubuntu 12.04?
ou
sudo apt-get install libprotobuf-java protobuf-compiler
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/<file>.proto
link: https://developers.google.com/protocol-buffers/docs/proto3
message SearchRequest {
string query = 1;
int32 page_number = 2; // Which page number do we want?
int32 result_per_page = 3; // Number of results to return per page.
}
message Foo {
reserved 2, 15, 9 to 11;
reserved "foo", "bar";
}
message SearchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES = 2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
Corpus corpus = 4;
}
// Usando alias para representar a mesma coisa
message MyMessage1 {
enum EnumAllowingAlias {
option allow_alias = true; // necessario deixar essa opção como true, senão vai dar erro, como abaixo
UNKNOWN = 0;
STARTED = 1;
RUNNING = 1;
}
}
message MyMessage2 {
enum EnumNotAllowingAlias {
UNKNOWN = 0;
STARTED = 1;
// RUNNING = 1; // Uncommenting this line will cause a compile error inside Google and a warning message outside.
}
}
//Observe que você não pode misturar nomes de campo e valores numéricos na mesma reservedinstrução.
message SearchResponse {
repeated Result results = 1; //o repeat dis que pode ser repetido os itens, semelhate a uma lista
}
message Result {
string url = 1;
string title = 2;
repeated string snippets = 3;
}
// Tipo aninhado
message SearchResponse {
message Result {
string url = 1;
string title = 2;
repeated string snippets = 3;
}
repeated Result results = 1;
}
// chamdando tipo aninhado
message SomeOtherMessage {
SearchResponse.Result result = 1;
}
// Exemplo de message aninhada
message Outer { // Level 0
message MiddleAA { // Level 1
message Inner { // Level 2
int64 ival = 1;
bool booly = 2;
}
}
message MiddleBB { // Level 1
message Inner { // Level 2
int32 ival = 1;
bool booly = 2;
}
}
}
caso a mensagem que queira colocar dentro da mensagem esteja em outro proto, vc pode importa-lo
import "myproject/other_protos.proto";
O gRPC permite definir quatro tipos de método de serviço:
Em que o cliente envia uma única solicitação ao servidor e obtém uma única resposta, exatamente como uma chamada de função normal.
rpc SayHello(HelloRequest) returns (HelloResponse);
Em que o cliente envia uma solicitação ao servidor e obtém um stream para ler uma sequência de mensagens de volta. O cliente lê a partir do fluxo retornado até que não haja mais mensagens. O gRPC garante a ordem das mensagens em uma chamada RPC individual.
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
Em que o cliente grava uma sequência de mensagens e as envia ao servidor, novamente usando um fluxo fornecido. Depois que o cliente termina de escrever as mensagens, ele espera que o servidor as leia e retorne sua resposta. Mais uma vez, o gRPC garante a ordem das mensagens em uma chamada RPC individual.
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
Em que ambos os lados enviam uma sequência de mensagens usando um fluxo de leitura e gravação. Os dois fluxos operam de forma independente, para que os clientes e servidores possam ler e escrever na ordem que quiserem: por exemplo, o servidor pode esperar para receber todas as mensagens do cliente antes de escrever suas respostas, ou pode alternativamente ler uma mensagem e depois escrever uma mensagem, ou alguma outra combinação de leituras e gravações. A ordem das mensagens em cada fluxo é preservada.
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);