lucky777-dev / java-util Goto Github PK
View Code? Open in Web Editor NEWMy own util methods in Java
My own util methods in Java
Salut @lucky777code,
Je sais que ça fait déjà longtemps que tu as écrit ceci:
(on trouve les même ligne ici également) mais je pensais que je pourrais te faire l'une ou l'autre remarque et te proposer une méthode plus moderne.
Tout d'abord, un tableau java connait sa longueur
String[] tab = /* peu importe */;
int longueur = tab.length;
En s'inspirant de la librairie standard du langage rust
, on peut écrire quelque chose comme ce qui suit.
On crée une énumération
public enum SearchResult
{
Found,
NotFound
}
et une classe (je ne sais pas si tu as déjà vu les types génériques mais sinon je pense que c'est facile à comprendre en lisant le code)
public class Search<T>
{
// Le résultat de la recherche
private SearchResult result;
// La valeur trouvée dans le cas ou le résultat est Found
private T foundValue;
/*
* Constructeur privé dans le but d'empêcher l'utilisateur de créer un objet
* avec le résultat Found et une valeur non null dans foundValue.
*/
private Search() {}
/*
* Résultat de recherche positif avec valeur.
*/
public static <T> Search<T> found(T foundValue)
{
Search<T> s = new Search<T>();
s.result = SearchResult.Found;
s.foundValue = foundValue;
return s;
}
/*
* Résultat de recherche négatif
*/
public static <T> Search<T> notFound()
{
Search<T> s = new Search<T>();
s.result = SearchResult.NotFound;
return s;
}
/*
* Accesseur de la valeur. Lance une exception (tu as vu les exceptions ?) si le résultat est négatif.
*/
public T getValue()
{
if (this.result == SearchResult.NotFound)
throw new IllegalStateException();
return foundValue;
}
/*
* Accesseur du résultat.
*/
public SearchResult getResult()
{
return result;
}
/*
* Affichage du résultat.
*/
public String toString()
{
if (getResult() == SearchResult.Found)
{
return "Found: " + getValue();
}
else
{
return "NotFound";
}
}
}
Ensuite la fonction de recherche peut s'écrire:
public static <T> Search<Integer> search(T[] arr, T value)
{
int idx = 0;
while (true)
{
if (idx == arr.length)
return Search.notFound();
if (arr[idx] == value)
return Search.found(idx);
idx += 1;
}
}
Alors tu vas me dire que ça fait beacoup de code pour pas grand chose à quoi je te répondrai que la classe Search
peut reservir dans d'autres cas (comme une recherche d'un fichier dans un dossier ou une recherche d'un élément dans un dictionnaire ou dans un arbre ou dans un graphe ou dans une DB etc.
Autre chose, tu remarqueras peut-être que l'énumération SearchResult
pourrait être remplacée par un boolean
mais je l'ai laissée parce qu'on pourrait alors ajouter des résultats comme AlmostFound
ou CollectionEmpty
(à utiliser avec java.util.EnumSet
par ex).
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.