Giter Club home page Giter Club logo

functional.java's Introduction

Functional.java

A set of java classes that makes writing concise java applications (be it mobile or desktop) easier by using the functional programm paradigm.

However, once Java 8 is released many of the classes, interfaces and methods of Funcitonal.java will be obsolete. Still, they will be useful for mobile programming as android java (dalvik) is still actually Java 5.

The package contains a subclass of AbstractCollection (CollectionUtils), with a copy constructor that extends a normal collection with functional methods. More methods and utilities are defined in the F.java class. See the javadocs for full information on what is contained in the package.

##Let's go

But here is a little preview of what you can expect:

First let's create a CollectionsUtils instance, that contains numbers from 1 to 10.

	// Create a list that contains numbers 1 to 10
	List<Integer> numberList = new F.Utils.LazyIntegerList(1, 10);
	// Create a CollectionUtils instance of this list
	CollectionUtils<Integer> numberListWithExtensions = new CollectionUtils<Integer>(numberList);
	// Have it printed
	F.Utils.print(numberListWithExtensions);

##each

The last call is using the utility class. We could have also used the each method of the list:

	numberListWithExtensions.each(new F.Runner<Integer>() {
		public void run(Integer o) {
			System.out.println(o);
		}
	});

##map

Let's assume that we need the string representation of the double of each number of the list, so we would want to have "2","4","6",... Here's how we could do that:

	CollectionUtils<String> doubleStrings = numberListWithExtensions.map(new F.Mapper<Integer, String>() {
		public String map(Integer i) {
			return Integer.toString(i * 2);
		}
	});
	
	System.out.println(doubleStrings.join(", ")); // 2, 4, 6, 8, 10, ...

As a bonus, using the join method of CollectionUtils we even have it as a comma separated string.

##reduce

Ok reducing is rather tricky. Say you want to have the sum of the numbers between 1 and 10. You could use a reduce method like this:

	Integer sum = numberListWithExtensions.reduce(new F.Reducer<Integer, Integer>() {
		public Integer reduce(Integer memo, Integer i) {
			return memo + i;
		}
	}, 0);
	
	System.out.println(sum); // 55

Everytime the reduce method is called the memo parameter is the result of the computation so far. So for the first call it is 0 (because we passed 0 as the second parameter for the call). For the next call it is 0 + 1 = 1. For the next call it is 1 + 2 = 3. For the next it is 3 + 3 = 6 and so on. I hope you get the idea. You can also use this method to calculate the minimum or maximum of a collection (but there's a different easier method for that).

##filter and reject

Filter and reject are two sides of the same coin. Let's filter our list and only get the odd numbers:

	CollectionUtils<Integer> oddNumbers = numberListWithExtensions.filter(new F.Decider<Integer>() {
		public boolean decide(Integer o) {
			return ((o % 2) == 1);
		}
	});
	
	System.out.println(oddNumbers.join(", ")); // 1, 3, 5, 7, 9

So if we wanted to have the even numbers we could have used the same decider but would have called reject instead.

##isValidforAll and isValidForAny

Say we want to know if any number in the list is divisible by 7. This is how we would do it:

	boolean anyDivisibleBySeven = numberListWithExtensions.isValidForAny(new F.Decider<Integer>() {
		public boolean decide(Integer i) {
			return ((i % 7)==0);
		}
	});
	
	System.out.println(anyDivisibleBySeven ? "At least 1 of them is divisible by 7" : "Sorry - no");

functional.java's People

Contributors

leuchtetgruen avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.