J'ai donc recherché Java7 capable d'effectuer des opérations de collecte intelligentes telles que Stream et LinQ. (Si vous connaissez un autre moyen d'éviter de tourner la déclaration for, veuillez me le faire savoir)
Awesome Java: Great Java Framework Library Software Il a été introduit dans l'article ci-dessus.
CQEngine Dépôt officiel Github: CQengin
License La licence de "CQ Engine" est "Apache License 2.0".
// already defined Attribute in Car Class
// search brand-new AAACar
uery<Car> query1 = and(
endsWith(Car.NAME, "AAACar"),
equal(Car.DISCREPRION, "brandNew")
);
ResultSet<car> resultSet = cars.retrieve(query1));
import static com.googlecode.cqengine.codegen.AttributeBytecodeGenerator.*;
// generate Attribute
CQNParser<Car> parser = CQNParser.forPojoWithAttributes(Car.class, createAttributes(Car.class));
// search brand-new AAACar
ResultSet<Car> results = parser.retrieve(cars,
"and("
+ "equal(\"name\",\"AAACar\"),"
+ "equal(\"discription\", \"brandNew\")"
+ " )");
// generate Attribute
SQLParser<Car> parser = SQLParser.forPojoWithAttributes(Car.class, createAttributes(Car.class));
// search brand-new AAACar
ResultSet<Car> results = parser.retrieve(cars,
"SELECT * FROM cars " +
"WHERE (" +
" name = 'AAACar' " +
" AND discription = 'brandNew')"
);
for (Car car : results ) {
System.out.println(car.toString());
}
Maven ~~ La dernière version pour le moment est incluse ~~ Insérez "2.12.4" qui peut être utilisé avec Java 7.
<dependency>
<groupId>com.googlecode.cqengine</groupId>
<artifactId>cqengine</artifactId>
<version>2.12.4</version>
</dependency>
En regardant les notes de publication, il semble que Java 7 et les versions antérieures soient exclus de la Ver3. CQEngine Release Notes
J'ai fait une voiture. * @Data est décrit car lombok est utilisé.
@Data
public class Car {
private int carId;
private String name;
private String discription;
private List<String> features;
}
// create car collection
Set<Car> cars = new HashSet<>();
cars.add( Car.builder().carId(0).name("AAACar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
cars.add( Car.builder().carId(1).name("BBBCar").discription("used").features( Arrays.asList("spare tyre", "radio")).build() );
cars.add( Car.builder().carId(2).name("CCCCar").discription("used").features( Arrays.asList("radio", "sunroof")).build() );
cars.add( Car.builder().carId(3).name("DDDCar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
cars.add( Car.builder().carId(4).name("AAACar").discription("used").features( Arrays.asList("radio", "sunroof")).build() );
cars.add( Car.builder().carId(5).name("BBBCar").discription("brandNew").features( Arrays.asList("spare tyre", "radio")).build() );
cars.add( Car.builder().carId(6).name("CCCCar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
cars.add( Car.builder().carId(7).name("DDDCar").discription("used").features( Arrays.asList("radio", "sunroof")).build() );
cars.add( Car.builder().carId(8).name("AAACar").discription("used").features( Arrays.asList("spare tyre", "sunroof")).build() );
cars.add( Car.builder().carId(9).name("BBBCar").discription("used").features( Arrays.asList("spare tyre", "radio")).build() );
cars.add( Car.builder().carId(10).name("CCCCar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
// search brand-new AAACar
Set<Car> results = new HashSet<>();
for (Car car : cars) {
if ( Objects.equals(car.getName(), "AAACar")
&& Objects.equals(car.getDiscription(), "brandNew") ) {
results.add(car);
}
}
for (Car car : results ) {
System.out.println(car.toString()); // => Car(carId=0, name=AAACar, discription=brandNew, features=[spare tyre, sunroof])
}
Puisqu'il est destiné à être utilisé comme un substitut à Stream, nous le vérifierons avec une politique de ne pas ajouter d'attribut à POJO. Essayez d'utiliser la notation CQN sans attribut. Generate attributes from private class fields Il semble difficile d'obtenir le champ privé de POJO, j'ai donc défini le paramètre pour utiliser getter dans createAttributes.
// generate Attribute
CQNParser<Car> parser = CQNParser.forPojoWithAttributes(Car.class, createAttributes(Car.class, MemberFilters.GETTER_METHODS_ONLY));
// create car collection
IndexedCollection<Car> cars = new ConcurrentIndexedCollection<>();
cars.add( Car.builder().carId(0).name("AAACar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
//(réduction)
cars.add( Car.builder().carId(10).name("CCCCar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
// search brand-new AAACar
ResultSet<Car> results = parser.retrieve(cars,
"and("
+ "equal(\"getName\",\"AAACar\"),"
+ "equal(\"getDiscription\", \"brandNew\")"
+ " )");
for (Car car : results ) {
System.out.println(car.toString()); // => Car(carId=0, name=AAACar, discription=brandNew, features=[spare tyre, sunroof])
}
// create car collection
Set<Car> cars = new HashSet<>();
cars.add( Car.builder().carId(0).name("AAACar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
//(réduction)
cars.add( Car.builder().carId(10).name("CCCCar").discription("brandNew").features( Arrays.asList("spare tyre", "sunroof")).build() );
// search brand-new AAACar
Set<Car> results = cars.stream()
.filter(car -> Objects.equals(car.getName(), "AAACar")
&& Objects.equals(car.getDiscription(), "brandNew") )
.collect(Collectors.toSet());
for (Car car : results ) {
System.out.println(car.toString());
}
Étant donné que Java7 n'est pas pris en charge pour CQEngine Ver3 et supérieur, l'erreur suivante se produit.
Unsupported major.minor version 52.0
Lightweight-Stream-API-I want to use Stream API with Java 6 and 7 Cela semble être une bibliothèque qui peut être utilisée comme Stream tel quel Lors de la migration vers Java8, cette bibliothèque est utilisée avant la migration et le code après la migration est Java8 Stream. Je pensais que je devais faire attention à ne pas entrer dans une situation chaotique Cette fois, j'ai décidé d'étudier du point de vue de savoir si CQ Engine peut dépasser la bibliothèque standard pour Java 8 et versions ultérieures. Donc, à l'avenir, j'aimerais évaluer les performances de CQ Engine dans le traitement de grandes quantités de données.
(J'écrirai dans un autre article) Il est difficile de préparer les données, alors recherchez une API qui peut obtenir beaucoup de données. Peut être utilisé par des particuliers! Liste des API recommandées
Recommended Posts