Skip to content
/ funj Public

Collections and functional tools to complete the missing parts of Java/Guava

License

Notifications You must be signed in to change notification settings

ahabra/funj

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

funj

Collections and functional tools to complete the missing parts of Java/Guava.

To use with Maven:

	<dependency>
		<groupId>com.tek271</groupId>
		<artifactId>funj</artifactId>
		<version>1.0.2</version>
	</dependency>

The maven central repo http://search.maven.org has the latest production version, while the latest code is in https://github.com/ahabra/funj

For the examples given below, suppose we have a class Cat

	class Cat {
		public long id;
		public String name;
		public int price;
		private String color;
		public String getColor() { return color; }
		public void setColor(String color) { this.color = color; }
	}

Additionally, suppose that we have a method getCats() which returns a list of Cats.

Notes

  1. You can access either getters/setters properties or fields by name directly.
  2. You can access nested properties and fields.

CollectionTools

toMap: Convert a collection to a map using one of collection's items properties as a key:

	List<Cat> cats = getCats();
	Map<Long, Cat> map = toMap(cats, "id");

Now the key in map is the id of Cat, while the value is the Cat object.

toMultimap: Group a collection by a property which is not unique:

	com.google.common.collect.Multimap<String, Cat> multimap = toMultimap(cats, "color");

isEmpty: Check if a collection is null or empty:

	isEmpty(cats)

Finder

findAll: Find a list of objects with a matching property value:

	List<Cat> foundList = findAll(cats, "id", 1, 2);

will find cats whose id is either 1 or 2.

findFirst: Find the first object with a matching value of a property:

	Cat found = findFirst(cats, "name", "tom");

will find the cat whose name property equals "tom"

reject: Return a list of objects whose value for propertyName is NOT any of the filter values

	List<Cat> foundList = reject(cats, "name", "tom", "gar");

will find cats whose names is not "tom" nor "gar".

Mapper

pluck: Extract/pluck a property from a list of cats:

	List<Long> ids = pluck(cats, "id");

pluckToSet: Extract/pluck a property from a list of cats and return a Set:

	Set<String> colors = pluckToSet(cats, "color");

pluckKeyAndValue: Extract/pluck a key and value from a list of cats and create a map:

	Map<Long, String> idsAndColors = pluckKeyAndValue(cats, "id", "color");

map: Map members of a list using a callback function:

Suppose that we have 3 cats with prices 10, 12, and 15. Also suppose that we have this callback function:

	public int doubleThePrice(Cat cat, int maxPrice) {
		return Math.min(cat.price * 2, maxPrice) ;
	}

If you call map() like this:

	List<Integer> prices = map(cats, this, "doubleThePrice", 25);

The prices list will be: [20, 24, 25].

Note The map() method is overloaded to support both static and dynamic callback methods.

About

Collections and functional tools to complete the missing parts of Java/Guava

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages