Deshalb habe ich nach Java7 gesucht, das intelligente Erfassungsvorgänge wie Stream und LinQ ausführen kann. (Wenn Sie einen anderen Weg kennen, um das Umdrehen der for-Anweisung zu vermeiden, lassen Sie es mich bitte wissen.)
Awesome Java: Großartige Java Framework Library-Software Es wurde im obigen Artikel vorgestellt.
CQEngine Offizielles Repository Github: CQengin
License Die Lizenz von "CQ Engine" lautet "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 ~~ Die aktuellste Version ist enthalten ~~ Fügen Sie "2.12.4" ein, das mit Java 7 verwendet werden kann.
<dependency>
<groupId>com.googlecode.cqengine</groupId>
<artifactId>cqengine</artifactId>
<version>2.12.4</version>
</dependency>
In den Versionshinweisen scheint Java 7 und niedriger von Ver3 ausgeschlossen zu sein. CQEngine Release Notes
Ich habe ein Auto gemacht. * @Data wird beschrieben, weil Lombok verwendet wird.
@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])
}
Da es als Ersatz für Stream verwendet werden soll, überprüfen wir es mit der Richtlinie, POJO kein Attribut hinzuzufügen. Versuchen Sie, die CQN-Notation ohne Attribut zu verwenden. Generate attributes from private class fields Es scheint schwierig zu sein, das private Feld von POJO abzurufen, daher habe ich die Einstellung so festgelegt, dass in createAttributes getter verwendet wird.
// 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() );
//(Kürzung)
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() );
//(Kürzung)
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());
}
Da Java7 für CQEngine Ver3 und höher nicht unterstützt wird, tritt der folgende Fehler auf.
Unsupported major.minor version 52.0
Lightweight-Stream-API-Ich möchte die Stream-API mit Java 6 und 7 verwenden Dies scheint eine Bibliothek zu sein, die wie Stream verwendet werden kann Bei der Migration auf Java8 wird diese Bibliothek vor der Migration verwendet, und der Code nach der Migration lautet Java8 Stream. Ich dachte, ich müsste vorsichtig sein, um nicht in eine chaotische Situation zu geraten Dieses Mal habe ich mich entschlossen zu untersuchen, ob CQ Engine die Standardbibliothek für Java 8 und höher überschreiten kann. Daher möchte ich in Zukunft die Leistung von CQ Engine bei der Verarbeitung großer Datenmengen bewerten.
(Ich werde in einem anderen Artikel schreiben) Es ist schwierig, die Daten vorzubereiten. Suchen Sie daher nach einer API, die viele Daten abrufen kann. Kann von Einzelpersonen verwendet werden! Empfohlene API-Liste
Recommended Posts